2010-07-22 67 views
0

我正在使用toplink作爲ORM工具,我面臨着一個特殊的問題。我將一個實體插入會話,然後在下一行中,如果我嘗試加載相同的實體,我無法獲得該實體,而是它返回空。但同樣的問題,如果我嘗試使用休眠,那麼它工作正常。任何人都可以請幫忙。插入toplink後無法加載實體

Address address = new Address(); 
address.setAddressId("1"); 
address.setPincode(1); 
uow2.registerNewObject(address); 
ExpressionBuilder builder = new ExpressionBuilder(); 
Expression expr = builder.get("addressId").equal("1"); 
Address address1 = (Address)uow2.readObject(Address.class, expr); 

最後,我把address1作爲null。我不明白,因爲我插入對象與相同的密鑰,然後試圖檢索它... plz幫助我...

+0

您使用的是JPA還是TopLink API?而究竟是什麼比較? AFAIK,TopLink的Session與Hibernate Session不是一回事嗎?顯示一些代碼實際上可能有幫助 – 2010-07-22 23:34:16

回答

2

這是本機TopLink/EclipseLink代碼。您只是在UnitOfWork中「註冊」地址,它在提交之前不會寫出。

有幾種方法可以從UnitOfWork獲得未提交的結果。在上面的場景中,您可以在註冊新對象之前調用uow.setShouldNewObjectsBeCached(true),然後readObject調用將會找到它。

您還可以將readObject調用更改爲ReadObjectQuery,並在查詢中設置conformResultsInUnitOfWork。

如果您剛開始使用EclipseLink/TopLink,那麼我建議使用JPA API。您將能夠在JPA上找到許多資源。然後,一旦開始優化代碼或開始處理複雜的場景,您可以使用EclipseLink郵件列表和論壇獲取EclipseLink特定的幫助。

+0

謝謝戈登..它完美地爲我工作。 – 2010-07-26 07:22:39