我第一次尝试使用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警告发生的加分点 - 我没有设置任何此类属性......)
答案 0 :(得分:1)
啊哈,事实证明答案是传递:
"openjpa.RuntimeUnenhancedClasses" => RuntimeUnenhancedClassesModes.SUPPORTED
到配置图。为什么没有更清楚地记录这一点,我不确定......