Включить сохранение необязательного отношения один-к-одному (тот же код, который использовался для работы 5.2.13 и с 5.1.14) - PullRequest
0 голосов
/ 28 мая 2019

У меня есть обязательное взаимно-однозначное отношение между двумя сущностями, когда я добавляю необязательный = 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?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...