14

javax.persistence.NamedQueryJPA2との組み合わせで使用できました。名前付きクエリは、エンティティクラスファイルの先頭で定義され、ステートレスEJB(エンティティファサード)から使用されます。

ここで、エンティティクラスファイルを別のJarファイルに抽出する必要がありました(Google Web Toolkitプロジェクトからそれらを使用できるようにするため)。明らかに、私はまだjarを含めていますが、ファサード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)
    ...

ここでの問題は何ですか?外部JarでNamedQueriesを定義できませんか?

私はこのリンクを見つけました。これは、NamedQueriesをエンティティファイルの注釈としてではなく、XMLファイルに配置することを提案しています。これは私の問題を解決するためのアイデアかもしれませんが、私の質問には答えません...;)

4

1 に答える 1

25

解決策は、persistence.xml ファイルで JPA エンティティを含むクラスを指定することです。

<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 に通知する必要があります。もう 1 つのオプションは、<jar-file></jar-file>ノードを使用することです。

于 2011-05-30T09:15:18.703 に答える