Я читал похожий пост с этой проблемой, но не смог получить ответ от этого поста. У меня есть класс, который имеет множество другого объекта. Все работает на моей локальной машине без redis кеша. На удаленной машине мы используем кэш redis, и для первого запроса на обслуживание я могу получить ответ, но для второго запроса я получаю ошибку failed to lazily initialize a collection of role
. Так что в первую очередь я подумал, что это из-за ленивой загрузки.
Вот классы:
public class XClass implements Serializable {
@Id
@Column(name = "id")
private String id;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) // note that it is eager here
@JoinTable(name = "details",
joinColumns = {@JoinColumn(name = "old_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "new_id", referencedColumnName = "id")})
private Set<MyClass> myclasses = new HashSet<>();
-
public class MyClass implements Serializable {
@Embedded
private ID id;
@ElementCollection // fails here unless it is eager
@Enumerated(EnumType.STRING)
private Set<Flow> flows;
@ElementCollection // fails here unless it is eager
@Enumerated(EnumType.STRING)
private Set<Type> types;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id")
private XClass xclass;
}
Когда я запрашиваю объект XClass объект, он работает для первого запроса, но не может собрать второй объект MyClass, если они не извлекаются с нетерпением. (из-за кэша redis).
Но я не понимаю, почему, когда я запрашиваю другой объект который имеет коллекцию объекта MyClass не терпит неудачу. Пример класса:
public class YClass implements Serializable {
@Id
private String id;
private String name;
@OneToMany(mappedBy = "obj", fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
private Set<MyClasss> myclasses = new HashSet<>();
}
Здесь не происходит сбоев, независимо от того, с нетерпением выбираются коллекции или нет. Я был бы признателен, если бы вы могли дать некоторое представление о том, что может быть не так.