我使用JPA 2.1和Hibernate 4.3.7JPA Hibernate延遲多到一個獲取代理
我試圖調節我的應用程序,所以我把懶關係,只獲取什麼,我需要他們
當我重新加載實體時轉爲懶惰時,我遇到了多對一關係的問題即使我獲取實體並且此代理未在視圖部分(JSF)中工作,Hibernate也會用代理替換實體的應用程序。 問題disapear時多到一個是渴望模式,但冬眠執行一個選擇更多每個許多到一個即使我不需要他們
@Entity
public class Department {
@Id
private Integer id;
//...
}
1/
@Entity
public class Employee {
@Id
private Integer id;
@ManyToOne(fetch = FetchType.LAZY, optional = true)
@JoinColumn(name = "id_department", referencedColumnName = "id")
private Department department;
//...
}
的JPQL查詢:
SELECT e FROM Employee e LEFT JOIN FETCH e.department WHERE e.id=:id
=>一個選擇查詢=>速度快,但部門型機關_ $$ _ jvst3ac_5f的,這確實代理(employee.getDepartment()的getClass()另一方面,getCanonicalName()。)
SELECT e FROM Employee e WHERE e.id=:id
=> 2個選擇=>慢,但部門加載爲系和一切:在應用程序
2/
@Entity
public class Employee {
@Id
private Integer id;
@ManyToOne(fetch = FetchType.EAGER, optional = true)
@JoinColumn(name = "id_department", referencedColumnName = "id")
private Department department;
//...
}
的JPQL查詢的視圖部分不能正常工作在應用程序的視圖部分中處於良好狀態
該關係是單向的,部門沒有參照僱員
當使用FETCH JOIN時,這可能使部門沒有代理嗎?
後Luiggi的迴應,我將一種高精度的數據獲取與懶惰多到一個+ fetch連接。當我做一個employee.getDepartment()。toString()時我有Department {id = 11,...}但這個部門的類仍然是Department _ $$ _ jvst3ac_5f。原因我不知道,即使數據被提取,JSF/PrimeFaces selectOneMenu組件也不能正常工作HibernateProxy
我嘗試使用Hibernate批註@LazyToOne(LazyToOneOption.FALSE),另外還有@ManyToOne (fetch = FetchType.LAZY),但結果類似於@ManyToOne(fetch = FetchType.EAGER)單獨...
嗨,我知道這是相當一段時間,你有這個問題,但你找到了這個問題的優雅解決方案? – Tarator 2016-08-09 19:58:32