OneToMany и OneToOne в одной и той же сущности, ссылающейся на одну и ту же другую сущность, вызывают переполнение стека - PullRequest
0 голосов
/ 04 марта 2019

У меня следующая ситуация:

ошибка переполнения стека

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Base implements Serializable {

    @Id
    private int Id;

    private String fieldA;
    private String fieldB;

    @ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @Id
    private ContainerOfAll owner;

    //getters/setters...
}

@Entity
public class ConcreteA extends Base {

    @Basic(optional=true)
    private String someSpecialProp;

    //getters/setters...
}

@Entity
public class ConcreteB extends Base {

    @Basic(optional=true)
    private String thing;

    //getters/setters...
}

@Entity
public class ContainerOfAll {

    @Id
    private String containerId;

    @OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="owner")
    private Set<Base> elements;

    @OneToOne
    private ConcreteA specificElement;

    //getters/setters...
}

При вызове EntityManager#find() в ContainerOfAll будет переполнение стека.Подобные вопросы были решены путем удаления отношения @OneToOne к новой таблице, которая моделирует один ContainerOfAll к одному ConcreteA.Я просто превратил private ConcreteA specificElement в private int concreteAId и выполнил ручной поиск в методах EJB.

Мой вопрос, учитывая приведенную ниже настройку, как я могу это сделать, не добавляя таблицы и не играя ссырые идентификаторы?

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