У меня проблема с использованием CascadeType.Persist для моего JPA / автономного проекта.У меня есть родительская сущность, которая имеет список дочерних сущностей, которые должны быть сохранены вместе с родителем, а первичный ключ родительского объекта генерируется с использованием таблицы (GeneratorType.TABLE), и я использую таблицу для генерации первичного ключа.
В родительском у меня есть:
@OneToMany(mappedBy="parent",fetch=FetchType.EAGER,cascade= {CascadeType.PERSIST,CascadeType.DETACH})
List<Child> children;
//Getter and Setter
@PostPersist
public void setParentID(){
System.out.println("Inside Postpersist");
for(Child ch : this.children){
ch.setParent(this);
System.out.println(ch.getParent().getParentId());
}
}
В дочернем:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Parent_ID")
private Parent parent;
В БД у меня установлен ненулевой столбец Parent_ID родительской таблицы.Когда я сохраняю сущность Parent, и для нее задан список дочерних сущностей, он выдает
ConstraintViolationException: Cannot insert the value NULL into column 'Parent_ID', table 'jpaTest.Child', column does not allow nulls.
, поскольку Parent является нулевым для всех дочерних сущностей, хотя он печатает набор ParentId для каждой дочерней сущностиметод, аннотированный @PostPersist
Однако этого не происходит, и постоянство родительского и дочернего элементов имеет место, когда я меняю стратегию генерации первичного ключа с типа TABLE на AUTO.Как и почему это происходит.
Поставщик - Hibernate.И мой сервер БД mssql.