如何使用glassfish + toplink essentials加载lazy属性

时间:2009-10-13 16:01:29

标签: java jpa glassfish toplink-essentials

我有一个问题:

select p from Product p

这给了我期望的结果,但其中一个列(我们称之为massiveDescription)很大,因为我要查询完整的产品列表,我想将其排除。

我将@Basic(fetch=FetchType.LAZY)添加到getMassiveDescription()但这没有区别(生成的sql仍包含所有列)。

我使用的玻璃鱼几乎开箱即用,它使用了toplink essentials。我认为可能需要做一些配置代理的事情,所以我尝试通过glassfish web界面在JVM选项中添加-javaagent:/path/to/toplink-essentials-agent.jar。然后我得到一个例外:

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

所以我想我需要将jta.jar添加到glassfish web ui中的classpath后缀框中。这给了我一个不同的例外:

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

所以现在我正在追逐罐子。我以相同的方式将toplink-essentials.jar添加到类路径中,但我仍然得到相同的异常。

我有几个问题:

  • glassfish应该支持字节码增强,以便开箱即用加载延迟属性吗?
  • 如果没有,我是否错过了正确的配置方式?
  • 我读到“实现此目的的”推荐方法是使用项目来仅选择查询中的部分实体。我更喜欢这个,但找不到任何关于如何做的文档。为select p交换select p.id, p.name, ...会给我带来奇怪的错误 - 但我只是在猜测语法。

1 个答案:

答案 0 :(得分:0)

原帖toplink essentials不支持此功能。 Eclipselink确实如此,所以看起来我正在移动ORM。