2009-10-13 30 views
0

我有一個查詢:如何使用延遲屬性加載在GlassFish + TopLink的要領

select p from Product p 

這給了我我所期望的結果,但在列(姑且稱之爲massiveDescription)的一個大,並且因爲我正在查詢我想要排除的產品的完整列表。

我加@Basic(fetch=FetchType.LAZY)getMassiveDescription()但這沒有什麼區別(生成的sql仍包含所有列)。

我很開箱使用glassfish,它使用了toplink essentials。我認爲可能需要配置代理,因此我嘗試通過glassfish Web界面在JVM選項中添加-javaagent:/path/to/toplink-essentials-agent.jar。然後,我得到一個異常:

java.lang.NoClassDefFoundError: javax/transaction/Synchronization 
     at ... 

所以我想我需要添加jta.jar到類路徑後綴框在GlassFish的Web UI。這給了我不同的例外:

java.lang.NoClassDefFoundError: oracle/toplink/essentials/transaction/JTASynchronizationListener 
     at oracle.toplink.essentials.transaction.JTATransactionController.<init>... 

所以現在我正在追逐罐子。我以相同的方式將toplink-essentials.jar添加到類路徑中,但我仍然得到相同的異常。

我有幾個問題:

  • 版是GlassFish應該支持懶加載財產字節碼增強開箱?
  • 如果不是,我錯過了正確的配置方式嗎?
  • 我讀到,「推薦」的方式來實現這一點是使用一個項目,只選擇查詢中的實體的一部分。我更喜歡這一點,但找不到有關如何去做的任何文檔。交換select pselect p.id, p.name, ...給了我奇怪的錯誤 - 但我只是在猜測語法。

回答

0

原來的toplink essentials不支持這個。 Eclipselink的確如此,看起來我正在移動ORM。

+0

德拉蒙,從TLE切換到Eclipselink是非常容易的,你不會後悔的! – fvu 2009-10-23 10:35:44

+0

不是。 GF從一開始就吐出一些相當混亂的信息。類加載和政策問題(其中一些仍未排序)。當然GF3沒有這個問題,但我不想切換。 – Draemon 2009-10-23 12:03:52