Двунаправленное отображение JPA не извлекает данные с глубоким отображением - PullRequest
0 голосов
/ 01 марта 2019

У меня есть следующие объекты JPA с двунаправленным отображением.Я пытаюсь получить все FeatureGroup в DTO.

Если я найду все в FeatureGroup и повторюсь, чтобы получить его функции.Это не придет.Я еще не знаком с JPA.Правильный ли мой подход?

Ниже приведены мои сущности.

@Entity
@Table(name="application")
@Data
class Application{
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) id;
    name;
    @OneToMany(mappedBy="application") 
    private Set<AppFeatureGroup> appFeatureGroup;
}

, затем

@Entity
@Table(name="appfeaturegroup")
@Data
class AppFeatureGroup {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) id;
    title;
    @OneToMany(mappedBy="appfeaturegroup")
    private Set<AppFeature> appFeature;
    @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="id", insertable=false, updatable=false)
    private Application application;
}

, затем

@Entity
@Table(name="appfeature")
@Data
class AppFeature{
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) id;
    title;
    @OneToMany(mappedBy="appFeature")
    private Set<AppSubFeature> appSubFeature;
    @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="id", insertable=false, updatable=false)
    private AppFeatureGroup appFeatureGroup;
}

и

@Entity
@Table(name="appsubfeature")
@Data
class AppSubFeature{
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) id;
    title;
    @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="id", insertable=false, updatable=false)
    private AppFeature appFeature;
}

затем

Я пытаюсь получить объекты, как показано ниже:

List<AppFeatureGroup> appFeatureGroupList = appFeatureGroupRepository.finAll()
//Also tried from Application application = findById(id) and from application also I tried to get the deep objects

for(AppFeatureGroup appFeatureGroup : appFeatureGroupList){
    //I get id and title. But,
    Set<AppFeature> appFeature = appFeatureGroup.getAppFeature();//This is empty    
}

Разве это не правильно, что я реализовал?Я пробовал также с fetch=FethType.EAGER.Но все еще не работает.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вероятно, это связано с использованием сгенерированных в lombok методов equals, hashcode и toString (посредством аннотации @Data), которые содержат двунаправленные ссылки между сущностями.Поэтому их вызов может привести к исключениям, таким как StackOverflowException и многим другим.

Замените @Data на @Setter, @Getter, @EqualsAndHashcode (exclude = {}), @ToString (exclude = {}).

0 голосов
/ 01 марта 2019

Я удалил @Data из lombok.Теперь работает нормально.Из-за этого lombok я получил ошибку, как показано ниже:

WARN  [org.hibernate.engine.loading.internal.LoadContexts] (default task-1) HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext

и ошибка anoter, как,

jpa Exception occurred: com.sun.jdi.InvocationException occurred invoking method..

Не используйте @Data для Entity, когда есть несколько отображений.

...