java JPA 1.0 错误:名称不是可识别的实体或标识符。已知实体名称:[]
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3914821/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JPA 1.0 error: The name is not a recognized entity or identifier. Known entity names: []
提问by akp
I am getting following exception while I try to execute simple JPA 1.0 code. What may be the cause?
当我尝试执行简单的 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.access0(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>
回答by Pascal Thivent
The first line of the trace warns you that your entities were not enhanced at build time or at class load time with a javaagent.
跟踪的第一行警告您,您的实体在构建时或类加载时未使用 javaagent 增强。
And while my understanding is that running the enhancer is not is not strictly required, the following part of the trace is still an hint that OpenJPA is not aware of any entity:
虽然我的理解是不严格要求运行增强器,但跟踪的以下部分仍然暗示 OpenJPA 不知道任何实体:
Error message: The name "Offeringattribute" is not a recognized entity or identifier. Known entity names: []
错误消息:名称“Offeringattribute”不是可识别的实体或标识符。已知实体名称:[]
It looks like that something went wrong and/or that OpenJPA didn't use any of the fallback mechanisms. Look for a previous warning in the logs. Or setup build time enhancement.
看起来出了点问题和/或 OpenJPA 没有使用任何回退机制。在日志中查找先前的警告。或者设置构建时间增强。
The following resources might help:
以下资源可能会有所帮助:
- Entity Enhancement
- OpenJPA User's Guide
- Section 2. Enhancement
回答by vallismortis
I was encountering this problem intermittently with a legacy JPA 1.0 web application. It was due to requests occurring to prior to Entity Enhancement.
我在使用旧版 JPA 1.0 Web 应用程序时间歇性地遇到了这个问题。这是由于在实体增强之前发生的请求。
If any is still stuck with a JPA 1.0 application and is encountering this problem intermittently, try adding the following to persistence.xml
:
如果任何仍然停留在 JPA 1.0 应用程序中并且间歇性地遇到此问题,请尝试将以下内容添加到persistence.xml
:
<property name="openjpa.MetaDataRepository" value="Preload=true" />
<property name="openjpa.MetaDataRepository" value="Preload=true" />
From Open JPA Documentation, Chapter 6.2: Metadata Repository:
来自 Open JPA 文档,第 6.2 章:元数据存储库:
Preload: A boolean property. If true, OpenJPA will eagerly load the repository on EntityManagerFactory creation. As a result, all Entity classes will be eagerly loaded by the JVM. Once MetaData preloading completes, all locking is removed from the MetaDataRepository and this will result in a much more scalable repository. If false, the repository will be lazily loaded as Entity classes are loaded by the JVM. The default value is false.
预加载:布尔属性。如果为 true,OpenJPA 将在 EntityManagerFactory 创建时急切地加载存储库。因此,所有实体类都将被 JVM 急切地加载。一旦 MetaData 预加载完成,所有锁定都将从 MetaDataRepository 中删除,这将导致一个更具可扩展性的存储库。如果为 false,则存储库将在 JVM 加载实体类时延迟加载。默认值为假。
This option was not available with openjpa-1.2.1
(2009), but was introduced by the time openjpa-1.2.3
was released (2013).
此选项在openjpa-1.2.1
(2009) 中不可用,但openjpa-1.2.3
在发布时 (2013)引入。
回答by baklarz2048
Read this very carefuly http://openjpa.apache.org/build-and-runtime-dependencies.html
仔细阅读http://openjpa.apache.org/build-and-runtime-dependencies.html
You have to add geronimo-* libraries to Your project, if it is stand-alone application.
如果项目是独立应用程序,则必须将 geronimo-* 库添加到您的项目中。