Проблемы с несколькими связями @OneToOne Hibernate с одними и теми же объектами класса - PullRequest
1 голос
/ 20 октября 2019

У меня есть следующее отображение Hibernate. я хочу отобразить два сопоставления @OneToOne на один и тот же объект класса, но у меня возникают проблемы.

// Инфо класс

public class Info {
@Id
@Column(name="info_id")
private String info_id;

@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval = true, mappedBy = "info")
    private Diary dairy1;
    @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval = true, mappedBy = "info")
    private Diary dairy2;

   // I use this method to set the dairy 
   public void setDairy(Dairy dairy) {
        if (getDairy1() == null) {
            setDairy1(dairy);
        } else if (getDairy2() == null) {
            setDairy2(dairy);
        }
    }

  // OTHER GETTERS EN SETTERS OMITTED

}

// Молочный класс

public class Dairy {
            @OneToOne(fetch = FetchType.EAGER)
            @JoinColumn(name = "info_id")
            private Info info;
        }

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я сохраняю Info с dairy1, установленным на новый объект Dairy, а затем извлекаю Info, тогда оба dairy1 en dairy2 инициализируются с одним и тем же объектом dairy1,Я ожидаю, что dairy2 будет null , но он инициализируется тем же объектом dairy1.

Я гуглил и гуглил, но ответа нет.

Любое руководство приветствуется

1 Ответ

0 голосов
/ 20 октября 2019

С вашими текущими классами, один экземпляр Info может иметь отношение к 2 экземплярам Diary. Вот почему определение @OneToOne здесь не является правильным.

Не зная, какую проблему вы пытаетесь решить, основываясь только на своем коде, будет возможно следующее решение:

Определите отношение как @OneToMany в классе Info и как @ManyToOne в классе Diary. Чтобы различать экземпляры Diary в одном и том же отношении, вы можете добавить атрибут order в Diary и установить значения 1 или 2 соответственно.

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