Ошибка JPA 1.0: имя не является распознаваемым объектом или идентификатором. Известные имена сущностей: []

Я получаю следующее исключение, когда пытаюсь выполнить простой код 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>

person akp    schedule 12.10.2010    source источник
comment
Какой сервер приложений вы используете? Я думаю, что приложение не было полностью развернуто, потому что в контексте JPA нет объекта. Вставить полную трассировку стека.   -  person baklarz2048    schedule 12.10.2010
comment
спасибо за ответ. Я опубликовал всю трассировку стека   -  person akp    schedule 12.10.2010
comment
Это отдельное приложение?   -  person baklarz2048    schedule 12.10.2010
comment
это веб-приложение. Но для модульного тестирования я написал основной метод. Я сделал запись в файле persist.xml, как показано выше.   -  person akp    schedule 12.10.2010


Ответы (3)


Первая строка трассировки предупреждает вас о том, что ваши объекты не были улучшены во время сборки или во время загрузки класса с помощью javaagent.

И хотя я понимаю, что запуск энхансера не является строго обязательным, следующая часть трассировки по-прежнему является намеком на то, что OpenJPA не знает ни о никакой сущности:

Сообщение об ошибке: Имя «Offeringattribute» не является распознаваемым объектом или идентификатором. Известные имена сущностей: []

Похоже, что-то пошло не так и/или OpenJPA не использовал ни один из резервные механизмы. Найдите предыдущее предупреждение в журналах. Или настроить улучшение времени сборки.

Следующие ресурсы могут помочь:

person Pascal Thivent    schedule 12.10.2010

Прочитайте это очень внимательно http://openjpa.apache.org/build-and-runtime-dependencies.html

Вы должны добавить библиотеки geronimo-* в свой проект, если это отдельное приложение.

person baklarz2048    schedule 12.10.2010
comment
Я использовал такой же код для подключения к какой-либо другой базе данных. Но у меня проблемы с подключением к этой. Обе базы данных являются DB2. - person akp; 12.10.2010
comment
есть ли какая-то проблема с persist.xml. Я пропустил конфигурацию persist.xml в исходном сообщении - person akp; 12.10.2010
comment
Прежде всего используйте Derby вместо db2 для тестирования. Если вы знакомы с maven, следуйте этому руководству. .illsley.org/2010/05/15/. - person baklarz2048; 12.10.2010
comment
на самом деле я новичок в проекте моей компании. Проект использует JPA, и мне нужно изменить существующий код. Ни один другой разработчик не знаком с JPA, и у меня есть крайний срок 1 день. На самом деле приложение JPA API разработано, мне нужно использовать эти API, но те apis не работает, я думаю, какая-то проблема с конфигурациями. Жду вашей помощи. - person akp; 12.10.2010
comment
Я должен был бы иметь все ваше окружение, чтобы помочь вам. - person baklarz2048; 13.10.2010

Я периодически сталкивался с этой проблемой в устаревшем веб-приложении JPA 1.0. Это произошло из-за запросов, поступивших до улучшения сущности.

Если какое-либо приложение все еще зависает в приложении JPA 1.0 и периодически сталкивается с этой проблемой, попробуйте добавить следующее в persistence.xml:

<property name="openjpa.MetaDataRepository" value="Preload=true" />

Из документации Open JPA, глава 6.2: репозиторий метаданных:

Предварительная загрузка: логическое свойство. Если это правда, OpenJPA с готовностью загрузит репозиторий при создании EntityManagerFactory. В результате все классы Entity будут с готовностью загружаться JVM. После завершения предварительной загрузки метаданных вся блокировка снимается с репозитория метаданных, и в результате репозиторий становится гораздо более масштабируемым. Если false, репозиторий будет загружаться лениво, поскольку классы Entity загружаются JVM. Значение по умолчанию неверно.

Эта опция не была доступна в openjpa-1.2.1 (2009 г.), но была представлена ​​к моменту выпуска openjpa-1.2.3 (2013 г.).

person vallismortis    schedule 17.11.2015