У меня есть обязательное взаимно-однозначное отношение между двумя сущностями, когда я добавляю необязательный = false, у меня появляется следующая ошибка Enable: свойство not-null ссылается на нулевое или временное значение.Ниже две сущности.
Следующий случай используется для работы с Hibernate 5.1.14 и версиями, предшествующими 5.2.13.
Когда я удаляю «option = false» из аннотации @OneToOneполя factoryEntry сущности ViewFormat, все отлично работает.
Сущности
@Access(AccessType.FIELD)
@Table(name = "viewformat_FactoryEntry")
@javax.persistence.Entity(name = "viewformat_FactoryEntry")
public class FactoryEntry {
@Id
@Basic(fetch = FetchType.EAGER, optional = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id = null;
@OneToOne(cascade = javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, optional = true, orphanRemoval = true)
@javax.persistence.JoinColumn(name = "viewFormat_id_", referencedColumnName = "id", unique = false, nullable = true)
private ViewFormat viewFormat;
public ViewFormat getViewFormat() {
return this.viewFormat;
}
public void setViewFormat(ViewFormat viewFormat) {
if (this.viewFormat != viewFormat) {
this.viewFormat = viewFormat;
if (viewFormat != null) {
this.viewFormat.setFactoryEntry(this);
}
}
}
}
@Access(AccessType.FIELD)
@Table(name = "viewformat_ViewFormat")
@javax.persistence.Entity(name = "viewformat_ViewFormat")
public class ViewFormat {
@Id
@Basic(fetch = FetchType.EAGER, optional = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id = null;
@OneToOne(fetch = FetchType.LAZY, optional=false , mappedBy = "viewFormat")
private FactoryEntry factoryEntry;
public FactoryEntry getFactoryEntry() {
return this.factoryEntry;
}
public void setFactoryEntry(FactoryEntry factoryEntry) {
if (this.factoryEntry != factoryEntry) {
this.factoryEntry = factoryEntry;
if (factoryEntry != null) {
this.factoryEntry.setViewFormat(this);
}
}
}
}
Исходный код
sessionObj = buildSessionFactory().openSession();
sessionObj.beginTransaction();
FactoryEntry factoryEntry = new FactoryEntry();
ViewFormat viewFormat = new ViewFormat();
factoryEntry.setViewFormat(viewFormat);
sessionObj.merge(factoryEntry);
Вызывается: org.hibernate.PropertyValueException: свойство not-null ссылается на нулевое или временное значение: com.ViewFormat.factoryEntry в org.hibernate.engine.internal.Nullability.checkNullability (Nullability.java:92) в org.hibernate.action.internal.AbstractEntityInsert.nullifyTransientReferencesIfNotAlready (AbstractEntityInsertAction.java:115) в org.hibernate.action.internal.EntityIdentityInsertAction.execute (EntityIdentityInsertAction.java:69) в org.hibernate.engine.spi.ActionQueueh.ege.exue.extext).engine.spi.ActionQueue.addResolvedEntityInsertAction (ActionQueue.java:282) в org.hibernate.engine.spi.ActionQueue.addInsertAction (ActionQueue.java:263)
Не могли бы вы помочь мне исправить мой код, если он не является ошибкой в Hibernate?
Спасибо