2010-09-30 32 views
1

我正在使用Java Enterprise Edition和JPA(Hibernate)作爲服務器 - 客戶端應用程序(通過EJB)。 該程序將大量數據存儲在需要傳輸到客戶端的數據庫中。 因爲我想盡可能少地傳輸數據,所以我不想傳輸兩次對象。通過EJB/JPA(休眠)只傳遞一次對象

我想展示一個小例子我的問題:

數據庫:

[User] 
- UserID (PK) 
- Name 
- Adress (FK) 

[Adress] 
- AdressID (PK) 
- Street 

Sample data: 
[User:1, Max, 1] 
[User:2, Peter, 2] 
[Adress:1, Mainstreet] 
[Adress:2, Riverstreet] 

現在我要轉移的所有用戶的列表(與ADRESS的熱切加載)到客戶端,也所有地址列表。

服務器端創建列表:

用戶列表:

Query q = manager.createQuery("select u from UserBean m LEFT JOIN FETCH u.adress"); 
List<UserBean> l = (List<UserBean>) q.getResultList(); 
return l; 

Adresslist:

Query q = manager.createQuery("select a from AdressBean m"); 
List<AdressBean> l = (List<AdressBean>) q.getResultList(); 
return l; 

當客戶端獲取列表我檢查user1.getAdress().hashCode()的散列碼與adress1.hashCode()。 結果是它不相同,因此該對象必須已保存兩次,並且在獲取列表時還要傳輸兩次。

是否有可能告訴(也許在EJB中)僅傳輸一次對象並傳輸正確的引用?或者我能改善我的轉移機制嗎?

非常感謝! Peter31280

回答

2

如果您的客戶端運行在不同的VM中,則無法傳輸相同的實例。反序列化默認創建對象的新實例。

所以你最好在你的課上覆蓋hashCode()equals()

+0

還有什麼:) +1 – 2010-10-02 16:14:09