Hibernate war中未找到外部jar中的JPA实体

Hibernate war中未找到外部jar中的JPA实体,hibernate,jakarta-ee,jpa,jboss-eap-6,Hibernate,Jakarta Ee,Jpa,Jboss Eap 6,我使用JPA 2和Hibernate 4.2在JBoss EAP 6.1上运行web应用程序war,其结构如下: 来自其他内部项目的Entity.jar Application.war包含WEB-INF/lib中的Entity.jar,作为maven依赖项而不是maven模块包含 在我的web应用程序项目application.war中,我有一个包含EntityManager的EJB。在EJB中,我想为Entity.jar中的实体创建一个JQL查询em.createQuery 如果调用包含查询的

我使用JPA 2和Hibernate 4.2在JBoss EAP 6.1上运行web应用程序war,其结构如下:

来自其他内部项目的Entity.jar Application.war包含WEB-INF/lib中的Entity.jar,作为maven依赖项而不是maven模块包含 在我的web应用程序项目application.war中,我有一个包含EntityManager的EJB。在EJB中,我想为Entity.jar中的实体创建一个JQL查询em.createQuery

如果调用包含查询的EJB的方法,则会出现错误:

Caused by: javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [SELECT u FROM User as u WHERE u.name = :name]
entity.jar中的我的实体用户如下所示:

@Entity
@Table(name = "PL1_USER")
public class User implements Serializable {
...
Application.war中的EJB:

@Stateless
public class UserService {

@PersistenceContext(unitName = "my-unit")
private EntityManager entityManager;

public User getUser(String username) {
    TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User as u WHERE u.name = :name", User.class);
    query.setParameter("name", username);
    return query.getSingleResult();
}
}
- Application.war
    - META-INF
        - MANIFEST.MF (containing Entity.jar in Class-Path)
    - resources
    - WEB-INF
        - com
            - example
                - UserService.class
        - classes
            - META-INF
                - persistence.xml
        - lib
            - Entity.jar
    - index.xhtml
如果您需要更多信息/详细信息,请告诉我

我已经在谷歌上搜索过了,但我没有发现任何对我有用的东西


如果有人能帮助我,我非常高兴。

Pro JPA2这本书对包含JAR文件中的实体做了如下说明:

在JAR文件元素中列出JAR时,它必须相对于JAR文件的父级列出 META-INF/persistence.xml文件所在的位置。这与您将在类路径中放置的内容相匹配 舱单中的条目。例如,假设我们称之为emp.EAR的企业存档EAR是 结构如清单13-5所示

清单13-5。外部JAR中的实体

皇帝耳 emp-ejb.jar META-INF/persistence.xml lib/emp-classes.jar 示例/模型/Employee.class persistence.xml文件的内容应如清单13-6所示,其中包含jar文件 元素中包含“lib/emp classes.jar”以引用lib目录中的emp-classes.jar 耳锉。这将导致提供者添加在emp-classes.jar中找到的带注释的类 类,因为jar位于EAR的lib目录中,所以 自动位于应用程序类路径上

清单13-6。persistence.xml的内容

<persistence-unit name="EmployeeService">
<jta-data-source>java:app/jdbc/EmployeeDS</jta-data-source>
<jar-file>lib/emp-classes.jar</jar-file>
</persistence-unit>

问题似乎与jboss-deployment-structure.xml有关。Entity.jar还用于Application.war的登录机制JAAS,因此同一Entity.jar可作为EAP模块使用,并包含在Application.war的jboss-deployment-structure.xml中


也许JBoss EAP忽略了Application.war的lib目录中的Entity.jar,因为它已经在JBoss-deployment-structure.xml中声明并通过EAP模块包含。

现在,我没有ear,它只是一个war,但我已经尝试将jar文件值设置为lib/Entity.jar,但没有成功。ear文件是运行它的唯一方式吗?您需要使用部署的应用程序的结构更新该问题。我已将application.war的结构添加到该问题中。请参见此处:
<persistence-unit name="EmployeeService">
<jta-data-source>java:app/jdbc/EmployeeDS</jta-data-source>
<jar-file>lib/emp-classes.jar</jar-file>
</persistence-unit>