2016-06-23 45 views
0

Employee and Phone example春數據JPA,休眠,@ManyToOne(取= FetchType.LAZY)和org.hibernate.LazyInitializationException:無法初始化代理 - 沒有會話

如何讓Hibernate延遲初始化工作(在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

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)正是我的目標。

+0

碼你嘗試過current_session_context_class - >話題? – Apostolos

+0

你有沒有repository.impl類?您可以從JPA查詢中獲取數據。 –

+1

創建一個不包含反向引用的正確'toString'。問題是你正在記錄一些東西(我猜)...再次潛在的危險,因爲它會工作時,你可能會遇到一個堆棧溢出異常,因爲Pone引用'員工'有'toString'可能再次引用'Phone'並再次獲益。 –

回答

2

感謝M. Deinum的提示。

這種特殊的情況下 是通過添加EmployeetoString()解決在龍目島toString()

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

重新定義也specifying exactly Fetch type

https://github.com/paulvi/spring-boot-querydsl

+0

你也可以使用Lombok,並明確地排除'Phone'中的'employee'字段,它應該做到這一點。 –

0

我想你是試圖從當前會話分離的代理孩子, 你可以在同一會話中獲得懶惰的孩子。

+0

如何從通過JPA使用Spring Data存儲庫的Spring Boot控制會話(即Hibernate的東西)? –

相關問題