Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa NamedQuery:外部化实体后的IllegalArgumentException(未找到查询)_Jpa_Ejb_Named Query - Fatal编程技术网

Jpa NamedQuery:外部化实体后的IllegalArgumentException(未找到查询)

Jpa NamedQuery:外部化实体后的IllegalArgumentException(未找到查询),jpa,ejb,named-query,Jpa,Ejb,Named Query,我已经成功地将javax.persistence.NamedQuery与JPA2结合使用。命名查询在实体类文件的顶部定义,并从无状态EJB(实体外观)使用 现在我必须将实体类文件提取到一个单独的Jar文件中(这样我们就可以从GoogleWebToolkit项目中使用它们)。很明显,我仍然包含jar,但现在FacadeBean再也找不到查询了: java.lang.IllegalArgumentException: NamedQuery of name: Store.findByExternalI

我已经成功地将
javax.persistence.NamedQuery
与JPA2结合使用。命名查询在实体类文件的顶部定义,并从无状态EJB(实体外观)使用

现在我必须将实体类文件提取到一个单独的Jar文件中(这样我们就可以从GoogleWebToolkit项目中使用它们)。很明显,我仍然包含jar,但现在FacadeBean再也找不到查询了:

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中定义NamedQuery吗


我刚刚发现了这一点,建议将NamedQuery放在XML文件中,而不是作为注释放在实体文件中。这可能是一个解决我问题的想法,但并不能回答我的问题……;)

解决方案是在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>

org.eclipse.persistence.jpa.PersistenceProvider
jdbc/someDB
com.skalio.bonusapp.core.Store

背景是JPA需要被告知在哪里扫描注释。另一个选项是使用
节点。

您可以使用完整的包扫描,而不是像下面那样给出每个类的名称