我第一次尝试 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 ...
根据OpenJPA 文档 http://openjpa.apache.org/builds/2.0.1/apache-openjpa-2.0.1/docs/manual/ref_guide_pc_enhance.html#ref_guide_pc_enhance_runtime,我不需要做任何事情来在运行时获得基本的增强:
2.5.省略 OpenJPA 增强器
OpenJPA 不要求
运行增强器。如果您不运行
增强器,OpenJPA 将回退到
几种可能的替代方案之一
对于状态跟踪,取决于
执行环境。
Java 6 类
重新改造:
如果你正在跑步
Java 6 中的应用程序
环境中,OpenJPA 将尝试
动态注册一个
将重新定义的ClassTransformer
您持续不断的课程
跟踪对持久数据的访问。
此外,OpenJPA 将创建一个
你的每个持久化的子类
类。当您执行查询或
遍历一个关系,OpenJPA 将
返回子类的实例。
这意味着instanceof
运算符将按预期工作,但是
o.getClass() 将返回子类
而不是你写的类。
您根本不需要做任何事情
得到这种行为。 OpenJPA 将
自动检测是否
执行环境有能力
Java 6 类的重新转换。
有任何线索说明为什么这不起作用吗?非常感谢...
(为什么会发生 openjpa.Id 警告的奖励积分 - 我没有设置任何此类属性......)
啊哈,原来答案是传入:
"openjpa.RuntimeUnenhancedClasses" => RuntimeUnenhancedClassesModes.SUPPORTED
到配置图。为什么没有更清楚地记录这一点,我不确定......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)