[英]Understanding/Setting up hibernate configuration
我正在嘗試使用休眠技術來了解現有的應用程序,而我對此有一些了解。 在此應用程序中,已創建數據庫模式,並且已從數據庫模式自動生成類。
讓我們以數據庫中的兩個表為例:
PERSON(id, firstname, surname)
OBJECT(id, owner_id, description)
在該表OBJECT
, owner_id
將是一個外鍵PERSON.id
。
生成的類大致如下所示:
class Person {
// ok for the following
int id; // with getters and setters
String firstname; // with getters and setters
String surname; // with getters and setters
// dunno why the following ?
Set objects = new HashSet(0);
Set getObjects() { return this.objects; }
void setObjects(Set objects) this.objects = objects; }
}
class Object {
int id; // with getters and setters
Person owner; // with getters and setters
String description; // with getters and setters
}
首先,我不知道為什么要對生成的類Person
擁有的對象集進行引用。 其次,如果我通過HQL查詢獲得Object
或List<Object>
,則此Object
的Person
成員是否已完全加載? 我應該如何設置休眠以確保其休眠?
我之所以問是因為,在我的應用程序中,我將休眠會話作為單獨的可執行文件運行,而另一個驅逐出境的應用程序與休眠應用程序進行通信,並要求它發送一些持久對象。 我可以獲取一個Object
但是如果在此對象上創建object.getPerson().getFirstname()
,則會遇到org.hibernate.LazyInitializationException: could not initialize proxy - no Session
之所以得到LazyInitializationException,是因為在客戶端應用程序中,“對象”對象中“人”字段的值未初始化(它們沒有分配值)。 您試圖在未打開Hibernate會話的情況下訪問Hibernate實體的未初始化字段,因此Hibernate無法獲得該值。
如您所說,您必須確保收到的“對象”實例的所有字段均已初始化。 根據您的Hibernate實體的映射方式,有幾種可能性(為您提供映射方式,以便能夠以更具體的方式回答您是一個好主意)。 例如,您可以
查詢對象時,請使用顯式聯接。 HQL中類似這樣的東西(我也不知道您是否也在使用HQL)
從對象o中選擇o加入o.owner,其中o.id =:id
同樣,如果您向我們提供更多詳細信息,我們可以提供更准確的解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.