viperz
@viperz
inspired by Java

Обратная связь Hibernate — null?

Здравствуйте, уже долго борюсь с проблемой, про которую много пишут, отлично гуглится, но в моем случае она не решается по какой-то причине.

@Entity
@Table(name = EVENT_CLASS_FAMILY_TABLE_NAME)
public class EventClassFamily extends GenericModel<EventClassFamilyDto> {

    private static final long serialVersionUID = 3766947955702551264L;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = EVENT_CLASS_FAMILY_VERSION_EVENT_CLASS_FAMILY_ID, nullable = false)
    private List<EventClassFamilyVersion> schemas;


@Entity
@Table(name = EVENT_CLASS_FAMILY_VERSION_TABLE_NAME)
public class EventClassFamilyVersion extends GenericModel<EventClassFamilyVersionDto> {

    private static final long serialVersionUID = -7490111487256831990L;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "ecfv")
    //@OneToMany(cascade = CascadeType.ALL)
    //@JoinColumn(name = EVENT_CLASS_EVENT_CLASS_FAMILY_VERSION_ID, nullable = false)
    private List<EventClass> records;


@Entity
@Table(name = EVENT_CLASS_TABLE_NAME)
public class EventClass extends GenericModel<EventClassDto> {

    private static final long serialVersionUID = 3766947955702551264L;

    @ManyToOne
    @JoinColumn(name = EVENT_CLASS_TENANT_ID, nullable = false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Tenant tenant;

    @ManyToOne(cascade = CascadeType.ALL)
//    @OnDelete(action = OnDeleteAction.CASCADE)
    private EventClassFamilyVersion ecfv;


В момент сохранения EventClassFamily я имею: EventClassFamily с уже сгенерированным Id , EventClassFamilyVersion c Id=null поскольку он ещё не сохранялся и List , каждый из которых c Id=null .
После сохранения всё отлично , кроме того ,что во всех EventClass обратная связь на EventClassFamilyVersion (ecfv) = null , хотя анотации вроде указывают, что тут двухсторонняя связь.
  • Вопрос задан
  • 384 просмотра
Решения вопроса 1
jaxtr
@jaxtr
JavaEE/Spring-разработчик
Что бы получать наборы связанных объектов (@OneToMany и @ManyToMany) нужно указать fetch=FetchType.EAGER в аннотации связи. Это удобно, но есть подводный камень - количество выполняемых запросов к БД увеличится, ровно как и объёмы передаваемых данных.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы