@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.
Я надеюсь, что я пытаюсь помочь вам правильно понять проблему.Существует однонаправленное отношение «один ко многим» между двумя таблицами, где обновления происходят со строками, которые имеют одинаковые значения.
Я запутался, если это проблема «один ко многим» или составного ключа.