代码之家  ›  专栏  ›  技术社区  ›  Steven Schlansker

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

  •  2
  • Steven Schlansker  · 技术社区  · 14 年前

    我第一次尝试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将尝试 动态注册 将重新定义的类转换器 你坚持不懈的课程飞向 跟踪对持久数据的访问。 此外,OpenJPA将创建一个 每个持久的子类 类。执行查询或 遍历关系,openjpa将 返回子类的实例。 这意味着 操作员将按预期工作,但 o.getClass()将返回子类 而不是你写的课。 你什么都不需要做 以获得这种行为。OpenJPA意志 自动检测是否 执行环境能够 对Java 6类进行重新转换。

    有什么线索说明这不管用吗?多谢…

    (关于OpenJPA.ID警告发生的原因的奖励积分-我没有设置任何此类属性…)

    1 回复  |  直到 14 年前
        1
  •  1
  •   Steven Schlansker    14 年前

    啊哈,原来答案是传进来的:

    "openjpa.RuntimeUnenhancedClasses" => RuntimeUnenhancedClassesModes.SUPPORTED
    

    到配置映射。为什么没有更清晰的记录,我不确定…