Случай 1:
Я получал это исключение, когда пытался создать родителя и сохранить эту родительскую ссылку на его потомка, а затем какой-нибудь другой запрос DELETE / UPDATE (JPQL). Поэтому я просто сбрасываю () вновь созданную сущность после создания родителя и после создания дочернего элемента, используя ту же родительскую ссылку. Это сработало для меня.
Дело 2:
Родительский класс
public class Reference implements Serializable {
@Id
@Column(precision=20, scale=0)
private BigInteger id;
@Temporal(TemporalType.TIMESTAMP)
private Date modifiedOn;
@OneToOne(mappedBy="reference")
private ReferenceAdditionalDetails refAddDetails;
.
.
.
}
Детский класс:
public class ReferenceAdditionalDetails implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@OneToOne
@JoinColumn(name="reference",referencedColumnName="id")
private Reference reference;
private String preferedSector1;
private String preferedSector2;
.
.
}
В вышеприведенном случае, когда родитель (Reference) и потомок (ReferenceAdditionalDetails) имеют отношение OneToOne, и когда вы пытаетесь создать объект Reference, а затем его дочерний объект (ReferenceAdditionalDetails), он выдаст вам одно и то же исключение. Поэтому, чтобы избежать исключения, вы должны установить значение NULL для дочернего класса, а затем создать родительский. (Пример кода)
.
.
reference.setRefAddDetails(null);
reference = referenceDao.create(reference);
entityManager.flush();
.
.