NamedQuery: IllegalArgumentException (запрос не найден) после экстренной сущности

Я успешно использовал javax.persistence.NamedQuery в сочетании с JPA2. Именованные запросы определяются в верхней части файлов классов сущностей и используются из EAS (State Facade) без состояния.

Теперь мне пришлось извлечь файлы класса сущности в отдельный файл Jar (чтобы мы могли использовать их из проекта Google Web Toolkit). Очевидно, я все еще использую флягу, но теперь фасад bean больше не находит запрос:

java.lang.IllegalArgumentException: NamedQuery of name: Store.findByExternalId not found.
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getDatabaseQueryInternal(EJBQueryImpl.java:576)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1004)
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createNamedQuery(EntityManagerWrapper.java:533)
    at com.skalio.bonusapp.server.StoreFacade.getByExternalId(StoreFacade.java:43)
    ...

В чем проблема? Могу ли я определить NamedQueries во внешнем банке?

Я только что нашел ссылку , предлагая поместить NamedQueries в файлы XML, а не как аннотации в файлах сущностей. Это может быть идея решить мою проблему, но не отвечает на мой вопрос...;)

Ответ 1

Решение состоит в том, чтобы указать классы, содержащие объекты JPA в файле persistence.xml:

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="bonusAppServerPU" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/someDB</jta-data-source>
        <class>com.skalio.bonusapp.core.Store</class>
    </persistence-unit>
</persistence>

Предполагается, что JPA необходимо указать, где искать аннотации. Другой вариант - использовать <jar-file></jar-file> node.