尝试将实例强制转换为PersistenceCapable失败。确保它已得到增强

时间:2010-11-04 23:20:04

标签: java jpa jpa-2.0 openjpa

我第一次尝试使用OpenJPA 2.0.1,并且正在尝试:

79  WARN   [main] openjpa.Runtime - The configuration property named "openjpa.Id" was not recognized and will be ignored, although the name closely matches a valid property called "openjpa.Id".
179  INFO   [main] openjpa.Runtime - Starting OpenJPA 2.0.1
371  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.PostgresDictionary" (PostgreSQL 8.4.4 ,PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)).
<openjpa-2.0.1-r422266:989424 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance "x.quality.QualityQuery@4c4b11e9" to PersistenceCapable failed.  Ensure that it has been enhanced.
FailedObject: x.quality.QualityQuery@4c4b11e9
    at org.apache.openjpa.kernel.BrokerImpl.assertPersistenceCapable(BrokerImpl.java:4559)
    at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2561)
    at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423)
    at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069)
    at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:706)
    at ...

根据the OpenJPA docs,我不应该做任何事情来在运行时获得基本的增强功能:

  

2.5。省略OpenJPA增强器

     

OpenJPA不要求   增强器运行。如果你不运行   增强剂,OpenJPA将回归   几种可能的替代方案之一   用于状态跟踪,取决于   执行环境。

     

Java 6类   转发:

     

如果你在跑   您在Java 6中的应用程序   环境,OpenJPA将尝试   动态注册一个   ClassTransformer将重新定义   你的持久课程即时   跟踪对持久数据的访问。   此外,OpenJPA将创建一个   每个持久化的子类   类。当您执行查询或   遍历一个关系,OpenJPA会   返回子类的实例。   这意味着instanceof   运营商将按预期工作,但是   o.getClass()将返回子类   而不是你写的类。   你根本不需要做任何事情   得到这种行为。 OpenJPA会   自动检测是否   执行环境是有能力的   Java 6类重新转换。

为什么这不起作用的任何线索?非常感谢...

(为什么openjpa.Id警告发生的加分点 - 我没有设置任何此类属性......)

1 个答案:

答案 0 :(得分:1)

啊哈,事实证明答案是传递:

"openjpa.RuntimeUnenhancedClasses" => RuntimeUnenhancedClassesModes.SUPPORTED

到配置图。为什么没有更清楚地记录这一点,我不确定......