【发布时间】:2016-10-25 08:58:39
【问题描述】:
如何使 Hibernate Lazy 初始化工作(在 Spring Boot 中)?
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
at com.example.domain.Employee_$$_jvstb7e_2.toString(Employee_$$_jvstb7e_2.java) ~[bin/:na]
at java.lang.String.valueOf(String.java:2994) ~[na:1.8.0_74]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[na:1.8.0_74]
at com.example.domain.Phone.toString(Phone.java:13) ~[bin/:na]
at com.example.SpringBootQuerydslTestBean$1.run(SpringBootQuerydslTestBean.java:49) ~[bin/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:806) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]
... 6 common frames omitted
public class Phone {
...
@ManyToOne(fetch=FetchType.LAZY)
private Employee owner;
附:
一些建议使用FetchType.EAGER,如org.hibernate.LazyInitializationException: could not initialize proxy - no Session,
但让延迟加载工作(在 Spring Boot、Spring Data JPA 中)正是我的目标。
【问题讨论】:
-
你试过 current_session_context_class --> 线程吗?
-
你有 repository.impl 类吗?您可以从 JPA 查询中获取数据。
-
创建一个正确的
toString,它不包含反向引用。问题是你正在记录一些东西(我猜)......再次具有潜在危险,因为当它工作时你可能会遇到堆栈溢出异常,因为 Pone 引用Employee有一个toString可能再次引用Phone并获得一次又一次。
标签: java hibernate jpa spring-boot lazy-loading