2011-05-29 16 views
11

JPA2 ile birlikte başarıyla javax.persistence.NamedQuery kullandım. Adlandırılmış sorgular, varlık sınıfı dosyalarının üstünde tanımlanır ve Stateless EJB'lerden (varlık cephesi) kullanılır.NamedQuery: Varlıkların dışsallaştırılmasından sonra IllegalArgumentException (Sorgu bulunamadı)

Artık varlık sınıfı dosyalarını ayrı bir Jar dosyasına çıkartmak zorunda kaldım (böylece bunları bir Google Web Toolkit projesinden kullanabiliriz). Açıkçası ben hala kavanoz incude ama şimdi cephe fasulye artık sorgu bulamazsa:

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) 
    ... 

Burada sorun nedir? NamedQueries'i harici bir Jar'da tanımlayamıyorum?

Bu link'u buldum, XML dosyalarında NamedQueries'i varlık dosyalarındaki ek açıklamalar olarak değil, yerleştirmeyi önerdim. Bu ... benim sorunu çözmek için bir fikir olabilir, ama soruma cevap vermez;)

cevap

20

çözüm persistence.xml dosyasında JPA Varlıkları içeren sınıfları belirtmektir:

<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> 

Arkaplan, JPA'nın ek açıklamaları taramak için nereye söylenmesi gerektiğidir. Diğer seçenek <jar-file></jar-file> düğümünü kullanmaktır.

+0

Sen '< "sınıfı, HBM"/ = mülkiyet name = "hibernate.archive.autodetection" değer> ' aşağıda gibi her sınıf adını veren daha komple paket tarama yerine kullanabilirsiniz – Jess

İlgili konular