简体   繁体   English

Spring Data JPA,Hibernate,@ ManyToOne(fetch = FetchType.LAZY)和org.hibernate.LazyInitializationException:无法初始化代理-没有会话

[英]Spring Data JPA, Hibernate, @ManyToOne(fetch=FetchType.LAZY) and org.hibernate.LazyInitializationException: could not initialize proxy - no Session

In Employee and Phone example 在“ 员工和电话”示例中

How to make Hibernate Lazy initialization to work (within Spring Boot)? 如何使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

Java code Java代码

public class Phone {
    ...
    @ManyToOne(fetch=FetchType.LAZY)
    private Employee owner;

PS Some advises to use FetchType.EAGER like in org.hibernate.LazyInitializationException: could not initialize proxy - no Session , but making Lazy loading work (within Spring Boot, Spring Data JPA) is exactly my goal. PS有些人建议像在org.hibernate.LazyInitializationException中那样使用FetchType.EAGER :无法初始化代理-没有Session ,但是使惰性加载工作(在Spring Boot,Spring Data JPA中)正是我的目标。

Thanks to M. Deinum for hint. 感谢Deinum先生的提示。

This particular case was solved by adding toString() in Employee to re-define over Lombok toString() 通过在Employee添加toString()来重新定义Lombok toString() ,从而解决了这种特殊情况

@Override
    public String toString() {
        return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]";
    }

also specifying exactly Fetch type 还要指定确切的提取类型

code at https://github.com/paulvi/spring-boot-querydsl https://github.com/paulvi/spring-boot-querydsl上的代码

This is happening because of the Lombok instruction @Data, instead of it, use @Getter and @Setter, Follow javadocs from @Data: 这是由于Lombok指令@Data而不是使用@Getter和@Setter引起的,请遵循@Data中的javadocs:

Equivalent to @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode. 等效于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode。

The instruction @ToString generate a implementation of toString method for entire class, so in your JPA return needs to have data for all the object. @ToString指令为整个类生成toString方法的实现,因此在JPA返回中需要所有对象的数据。

我认为您正在尝试在当前会话分离时从代理获取子项,可以在同一会话中获取懒惰的子项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Spring JPA - org.hibernate.LazyInitializationException:无法初始化代理 - 无 Z71AB3B3AE294B3ABDE46 - Spring JPA - org.hibernate.LazyInitializationException: could not initialize proxy - no Session JPA存储库org.hibernate.LazyInitializationException:无法初始化代理-没有会话 - JPA repository org.hibernate.LazyInitializationException: could not initialize proxy - no Session 休眠问题:org.hibernate.LazyInitializationException:无法初始化代理-没有会话 - Hibernate issue: org.hibernate.LazyInitializationException: could not initialize proxy - no Session (org.hibernate.LazyInitializationException)org.hibernate.LazyInitializationException:无法初始化代理-没有会话 - (org.hibernate.LazyInitializationException) org.hibernate.LazyInitializationException: could not initialize proxy - no Session org.hibernate.LazyInitializationException:无法初始化proxy -no Session - org.hibernate.LazyInitializationException: could not initialize proxy -no Session org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话 - org.hibernate.LazyInitializationException: could not initialize proxy - no Session 多线程抛出 org.hibernate.LazyInitializationException:无法初始化代理 - 否 Session - Multithreading throws org.hibernate.LazyInitializationException: could not initialize proxy - no Session org.hibernate.LazyInitializationException:无法初始化代理-没有会话-很少发生 - org.hibernate.LazyInitializationException: could not initialize proxy - no Session - occurs rarely 如何修复 org.hibernate.LazyInitializationException - 无法初始化代理 - 没有 Session - How to fix org.hibernate.LazyInitializationException - could not initialize proxy - no Session org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话? - org.hibernate.LazyInitializationException: could not initialize proxy - no Session?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM