当我试图懒洋洋地读取子实体列表时,我(断断续续地)得到了这个错误。
failed to lazily initialize a collection of role: G.h, could not initialize proxy - no Session
关于这个错误,我已经浏览了一个关于SO的帖子列表。我所能找到的就是执行EAGER fetch或使用hibernate.enable_lazy_load_no_trans
属性。我不想做任何一个,因为他们是反模式。
@Service
@Transactional(readOnly = true)
public class AService {
public void someMethod(Long id) {
Optional<A> a = ARepository.findById(id); // This is a standard JPA repository interface where I have defined a method findById
final Optional<G> g = getG(a.get());
if (g.isPresent()) {
for (final H h : g.get().getH()) { // Exception is thrown exactly at line ..getH()
}
}
}
private Optional<G> getG(final A a) {
return a.getB()
.getD()
.getF()
.flatMap(F::getG);
}
}
@Entity
public class A implements Serializable {
@ManyToOne
private AGroup aGroup;
@Transient
public Optional<B> getB() {
return getC().map(C::getB);
}
public Optional<C> getC() {
if (aGroup != null) {
return Optional.ofNullable(aGroup.getC());
}
return empty();
}
}
@Entity
public class AGroup implements Serializable {
@ManyToOne
private C c;
@OneToMany(fetch = EAGER, cascade = ALL, mappedBy = "aGroup")
private final Set<A> as = new HashSet<>();
}
@Entity
public class C implements Serializable {
@OneToMany(fetch = LAZY, cascade = ALL, mappedBy = "c")
private List<AGroup> aGroups = new ArrayList<>();
@ManyToOne
private B b;
}
@Entity
public class B implements Serializable {
@OneToMany(fetch = LAZY, mappedBy = "b")
private Set<C> cs = new HashSet<>();
@ManyToOne(fetch = LAZY)
private D d;
}
@Entity
public class D implements Serializable {
@OneToMany(fetch = LAZY, mappedBy = "d")
private final List<B> bs = new ArrayList<>();
public Optional<F> getF() {
// based on some other fields return Optional.of(F)
}
}
@Entity
public class F implements Serializable {
@ManyToOne
private G g;
public Optional<G> getG() {
return Optional.ofNullable(g);
}
}
@Entity
public class G implements Serializable {
@OneToMany(mappedBy = "g")
private List<F> fs = new ArrayList<>();
@OneToMany(cascade = ALL, mappedBy = "g")
private List<H> hs = new ArrayList<>();
}
@Entity
public class H {
@ManyToOne
private G g;
}
我使用的是spring-data-jpa。这是一个spring-boot项目。请求来自web层(Rest控制器)
看起来底层Hibernate会话在某个时候关闭/重新打开,这使得G
分离。我不知道arepository.findbyid
做什么,也不知道您有什么样的拦截器。
我在更新Spring Boot应用程序中的一个实体时得到了这个错误。 这是完整的堆栈跟踪
*非拥有实体OneToMany与mappedBy*
我得到的错误是: 键入Rapport D'异常 描述Le serveur a rencontréune erreur interne qui léa satisfaire la requute. 原因mère 注意La trace complète de La case mère de cette erreur est disponible dans les fichiers journaux d
当我从angular发送post请求时,在spring boot requestfilter程序中,验证jwt令牌时显示错误。 面对问题: 未能懒惰地初始化角色集合:in.yis.mains.model.opsuserslogin.roles,无法初始化代理-没有会话
我尝试用java-hibernate-spring实现一个服务器REST,它返回一个JSON。 我有一个多对多关系图。 我解释得更好,我有一个供应商,有一个配料列表,每种配料都有一个供应商列表。 我创建了这个表: 然后我有配料模型: 然后我有供应商模型: 服务 供应对象 和IdAbstractObject “无法写入JSON:未能懒洋洋地初始化Role:myPackage.Comprigue.Co
我有下一个错误: 但是当我试图调用这个方法时,我在在上调用时也会出现同样的异常。我已经检查了事务管理器,它配置正确,事务在这一步中存在。此外,我已经检查了大量与此异常相关的stackoverflow的答案,但没有任何有用的。 它的原因是什么?