【问题标题】:JPA 1.0 error: The name is not a recognized entity or identifier. Known entity names: []JPA 1.0 错误:名称不是可识别的实体或标识符。已知实体名称:[]
【发布时间】:2011-04-24 07:26:35
【问题描述】:

我在尝试执行简单的 JPA 1.0 代码时遇到以下异常。 可能是什么原因?

5453  DevPQRWDPBSSPersist  WARN   [P=351601:O=0:CT] openjpa.Enhance - This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "[class com.XYZ.PQR.bss.client.db.data.markerentry, class com.XYZ.PQR.bss.client.db.data.Serviceproduct, class com.XYZ.PQR.bss.client.db.data.Agreementterms, class com.XYZ.PQR.bss.client.db.data.Offeringattribute, class com.XYZ.PQR.bss.client.db.data.marker, class com.XYZ.PQR.bss.client.db.data.OfferingpriceadjustmentrelPK, class com.XYZ.PQR.bss.client.db.data.Serviceoffering, class com.XYZ.PQR.bss.client.db.data.Offeringassociation, class com.XYZ.PQR.bss.client.db.data.OfferingpriceserviceofferingrelPK, class com.XYZ.PQR.bss.client.db.data.Offer, class com.XYZ.PQR.bss.client.db.data.Offeringpriceadjustmentrel, class com.XYZ.PQR.bss.client.db.data.Offeringfamily, class com.XYZ.PQR.bss.client.db.data.Offeringpriceserviceofferingrel, class com.XYZ.PQR.bss.client.db.data.Serviceproductattribute, class com.XYZ.PQR.bss.client.db.data.Offeringprice, class com.XYZ.PQR.bss.client.db.data.Agreement]".
6563  DevPQRWDPBSSPersist  TRACE  [P=351601:O=0:CT] openjpa.jdbc.SQL - <t 1183336072, conn 944453707> executing prepstmnt 152307988 SELECT so.* from DB2INST1.SERVICEOFFERING so where so.ISDELETED = 0 and so.id in (select oa.SERVICEOFFERINGID from DB2INST1.OFFERINGATTRIBUTE oa where oa.SERVICEOFFERINGID = so.id AND oa.name = ? and oa.STRINGVALUE = ? and oa.ISDELETED = 0) [params=(String) productbundleid, (String) attrValue]
7281  DevPQRWDPBSSPersist  TRACE  [P=351601:O=0:CT] openjpa.jdbc.SQL - <t 1183336072, conn 944453707> [718 ms] spent
Exception in thread "P=351601:O=0:CT" <openjpa-1.2.1-SNAPSHOT-r422266:686069 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter "SELECT OBJECT(attr) FROM Offeringattribute attr WHERE attr.serviceofferingid IN (:OfferingIds) AND attr.isdeleted = 0". Error message: The name "Offeringattribute" is not a recognized entity or identifier. Known entity names: []
 at org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(AbstractExpressionBuilder.java:118)
 at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:180)
 at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:150)
 at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:225)
 at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:195)
 at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:188)
 at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$600(JPQLExpressionBuilder.java:69)
 at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:1756)
 at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:56)
 at org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:153)
 at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:658)
 at org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:639)
 at org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:605)
 at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:667)
 at org.apache.openjpa.kernel.QueryImpl.getOperation(QueryImpl.java:1492)
 at org.apache.openjpa.kernel.DelegatingQuery.getOperation(DelegatingQuery.java:123)
 at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:243)
 at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:293)
 at com.XYZ.PQR.bss.client.offering.impl.OfferingServiceImpl.getOfferingsByStringAttribute(OfferingServiceImpl.java:661)
 at com.XYZ.PQR.bss.marker.impl.testAks.testAPI(testAks.java:38)
 at com.XYZ.PQR.bss.marker.impl.testAks.main(testAks.java:24)

    <properties>

<property name="openjpa.ConnectionDriverName" value="com.XYZ.db2.jcc.DB2Driver"/>
   <property name="openjpa.ConnectionURL" value="jdbc:db2://xyz.com:50000/ABC"/>
   <property name="openjpa.ConnectionUserName" value="usr"/>
   <property name="openjpa.ConnectionPassword" value="pwd"/>
   <property name="openjpa.jdbc.Schema" value="sch123"/>
    <property name="openjpa.Log" value="SQL=TRACE" />

</properties>

【问题讨论】:

  • 您使用哪个应用服务器?我认为应用程序没有完全部署,因为 JPA 上下文中没有实体。粘贴完整的堆栈跟踪。
  • 感谢回复。我已经发布了整个堆栈跟踪
  • 是独立应用吗?
  • 它是一个 webbase 应用程序。但是对于单元测试,我编写了一个 main 方法。如上所示,我已在 persistent.xml 中输入

标签: java jpa entitymanager openjpa jpa-1.0


【解决方案1】:

我在使用旧版 JPA 1.0 Web 应用程序时间歇性地遇到了这个问题。这是由于在实体增强之前发生的请求。

如果任何人仍然卡在 JPA 1.0 应用程序中并且间歇性地遇到此问题,请尝试将以下内容添加到 persistence.xml

&lt;property name="openjpa.MetaDataRepository" value="Preload=true" /&gt;

来自 Open JPA 文档,第 6.2 章:Metadata Repository

预加载:布尔属性。如果为真,OpenJPA 将急切地加载 EntityManagerFactory 创建的存储库。结果,所有实体 类将被 JVM 急切地加载。一旦元数据预加载 完成后,所有锁定都从 MetaDataRepository 中删除,这 将产生一个更具可扩展性的存储库。如果为假,则 存储库将被延迟加载,因为实体类由 JVM。默认值为 false。

此选项不适用于 openjpa-1.2.1 (2009),但在 openjpa-1.2.3 发布 (2013) 时引入。

【讨论】:

    【解决方案2】:

    跟踪的第一行警告您,您的实体在构建时或在类加载时没有使用 javaagent 增强

    虽然我的理解是运行增强器并不是严格要求,但以下部分的跟踪仍然暗示 OpenJPA 不知道任何实体

    错误消息:名称“Offeringattribute”不是可识别的实体或标识符。已知实体名称:[]

    似乎出了点问题和/或 OpenJPA 没有使用任何 fallback mechanisms。在日志中查找先前的警告。或者设置构建时间增强。

    以下资源可能会有所帮助:

    【讨论】:

      【解决方案3】:

      请仔细阅读http://openjpa.apache.org/build-and-runtime-dependencies.html

      如果是独立应用程序,您必须将 geronimo-* 库添加到您的项目中。

      【讨论】:

      • 我使用相同类型的代码连接到其他一些数据库。但是连接到这个时遇到问题。两个数据库都是 DB2。
      • persistent.xml 有问题吗。我已经在原帖中传递了persistent.xml 的配置
      • 首先使用 Derby 代替 db2 进行测试。如果您熟悉 maven,请遵循本教程log.illsley.org/2010/05/15/…
      • 实际上是我公司项目的新手。该项目使用 JPA,我必须修改现有的 cod。没有其他开发人员熟悉 JPA,我有 1 天的截止日期。实际上应用程序 JPA api 是我开发的需要使用这些 API,但这些 api 无法正常工作,我猜配置有一些问题。期待您的帮助
      • 我必须有你的整个环境来帮助你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 2017-09-13
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多