Han*_*ank 12 ejb jpa named-query
我已经成功地javax.persistence.NamedQuery
与JPA2结合使用.命名查询在实体类文件的顶部定义,并使用无状态EJB(实体外观).
现在我必须将实体类文件提取到一个单独的Jar文件中(因此我们可以从Google Web Toolkit项目中使用它们).显然我仍然包含jar,但现在facade 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)
...
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?我可以不在外部Jar中定义NamedQueries吗?
我刚刚找到了这个链接,建议将NamedQueries放在XML文件中,而不是作为实体文件中的注释.这可能是解决我的问题的一个想法,但不回答我的问题......;)
Han*_*ank 23
解决方案是在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>
Run Code Online (Sandbox Code Playgroud)
背景是需要告诉JPA在哪里扫描注释.另一种选择是使用<jar-file></jar-file>
节点.
归档时间: |
|
查看次数: |
21283 次 |
最近记录: |