jpa - 命名查询 : IllegalArgumentException (Query not found) after externalizing entities

标签 jpa ejb named-query

我已经成功使用javax.persistence.NamedQuery与 JPA2 结合使用。命名查询在实体类文件的顶部定义,并在无状态 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 吗?

我刚找到这个 link ,建议将 NamedQueries 放在 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>

背景是需要告诉 JPA 在哪里扫描注释。另一种选择是使用 <jar-file></jar-file>节点。

关于jpa - 命名查询 : IllegalArgumentException (Query not found) after externalizing entities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6170527/

相关文章:

具有多个命名参数和结果集的 Hibernate 存储过程调用不起作用

java - 向 Web 应用程序添加搜索功能和页面支持

sql - JPQL IN 子句 : Java-Arrays (or Lists, 设置...)?

java - JPA CriteriaBuilder 值如列

java - 如何从 Google App Engine(Java) 数据存储中的子实体查询父实体?

java - 将无状态 session bean 注入(inject) Seam 2.2 中的 EntityHome 派生后引发空指针异常

java - 在方法上使用 @TransactionAttribute(value = TransactionAttributeType.NEVER)

grails - propertyMissing在条件中不起作用?

java - 带有 resultClass 参数的 NamedQuery 未返回查询结果的预期 "type"

java - 使用 hibernate/JPA 登录