Каскадная операция Hibernate в отношении OneToMany дает запрос на обновление - PullRequest
1 голос
/ 23 февраля 2012
@Entity
@Table(name="table1")
public class Parent{

    @Id
    @Column(name="Parentid")
    private String Parentid;

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @JoinColumn(name="Parentid" referencedColumnName="Parentid")
    private List<Child> objChild;
    .....//getters and setters
}

Ребенок использует составной первичный ключ.и код для этого: -

@Embeddable
public class ChildPk{

    @Column(name="...")
    private String str1;

    @Column(name="...")
    private String str2;
    .....//getters and setters
}

@Entity
@Table(name="table2")
public class Child{

    @Column(name="Parentid", nullable="false")
    private String Parentid;  //this the foriegn key referencing Entity1

    @EmbeddedId
    private ChildPk objChildPk;

    .....//getters and setters
}

Согласно приведенному выше коду, у меня есть отношение «один ко многим» между родителем и ребенком.И потомок содержит составной ключ в качестве своего первичного ключа.

Я заполняю потомок составным ключом, добавляю его в Parent, заполняю Parent и сохраняю Parent с помощью session.save ().Это выполнить оператор вставки на Child успешно.Точно так же, если я пытаюсь вставить другой дочерний объект, но содержащий тот же составной ключ, что и ранее, но другой внешний ключ, а затем снова попытаться сохранить родительский объект, он фактически обновляет существующую строку в Child с новым Parentid.

Что касается реляционной базы данных, я понимаю, что дублирующую запись составного ключа в дочерней таблице не удастся вставить.Но Hibernate обновляет существующую строку, потому что значения одинаковы (??).Я попытался вставить разные значения для составного ключа, и он вставил нормально в таблицу Child.

Я надеюсь, что я пытаюсь помочь вам правильно понять проблему.Существует однонаправленное отношение «один ко многим» между двумя таблицами, где обновления происходят со строками, которые имеют одинаковые значения.

Я запутался, если это проблема «один ко многим» или составного ключа.

...