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
Hibernate 自动扫描WAR文件中打包的多个LIB-jar文件中的JPA实体_Hibernate_Jpa_Jakarta Ee_Vaadin_War - Fatal编程技术网

Hibernate 自动扫描WAR文件中打包的多个LIB-jar文件中的JPA实体

Hibernate 自动扫描WAR文件中打包的多个LIB-jar文件中的JPA实体,hibernate,jpa,jakarta-ee,vaadin,war,Hibernate,Jpa,Jakarta Ee,Vaadin,War,我有一个使用JEE 7、JPA 2.1、Wildfly 10.1和Vaadin 8的多模块Maven web项目,我试图通过在WAR项目中使用核心应用程序组件并导入各种其他模块来保持模块化,例如核心模块(用户/角色管理等),其中包括: 核心api(服务接口、JPA实体等) 核心服务(业务和持久性EJB) 核心ui(Vaadin ui组件,如@CDIView类、菜单生成器EJB) 因此,部署如下所示: core-web.war WEB-INF/ beans.xml(空) 类/(单个Vaa

我有一个使用JEE 7、JPA 2.1、Wildfly 10.1和Vaadin 8的多模块Maven web项目,我试图通过在WAR项目中使用核心应用程序组件并导入各种其他模块来保持模块化,例如核心模块(用户/角色管理等),其中包括:

  • 核心api(服务接口、JPA实体等)
  • 核心服务(业务和持久性EJB)
  • 核心ui(Vaadin ui组件,如@CDIView类、菜单生成器EJB)
因此,部署如下所示:

  • core-web.war
    • WEB-INF/
      • beans.xml(空)
      • 类/(单个Vaadin UI类,无其他)
      • 解放党/
        • persistence.jar(仅包含META-INF/persistence.xml的资源库)
        • core-api.jar
        • core-services.jar
        • core-ui.jar
        • (瓦丁罐和其他各种图书馆罐)
然后,当我们添加其他组件时,我们可以混合和匹配不同的部署配置,例如,通过将这些api、服务和ui jar文件以及核心(如图所示)添加到Maven概要文件中的部署来添加记帐模块

我现在的问题是让JPA扫描lib文件夹中的所有jar文件,查找persistence.xml中定义的持久性单元的实体

我不想显式列出所有实体类(或jar文件),因为该集合将因不同的部署而改变

在persistence.xml中将exclude unlisted class设置为false会在部署到EAR中时引发所需的行为,但不幸的是,Vaadin在部署到EAR中时效果不佳。它打破了许多CDI功能

所以我正试图通过战争部署来实现这一点。我已经尝试将persistence.xml包含在WAR的WEB-INF/classes/META-INF文件夹中,以及WAR的WEB-INF/lib文件夹中的一个单独的库jar(在/META-INF下)中,我发现使其工作的唯一方法是在persistence.xml文件中包含一个空的
元素

<persistence-unit name="my.persistence.unit" transaction-type="JTA">
    <jta-data-source>java:jboss/datasources/ApplicationDS</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <jar-file></jar-file>
</persistence-unit>

java:jboss/datasources/ApplicationDS
假的
xml验证器在Eclipse中抱怨这一点,但当我部署到Wildfly时,它可以工作;我的实体被发现,并从数据库中检索出来

但是我只在一个地方看到过这个小把戏,并且找不到任何关于它的文档,所以当我不知道我们是否可能依赖Hibernate中的一个bug或者其他什么的时候,我犹豫着说“是的,我们解决了它”

有人知道这是否是解决该问题的有效方法吗?或者如果有其他修复方法,我应该试试


谢谢。

您的每个模块中都有beans xml吗?我在基本war文件和两个EJB jar中有,而不是在包含API的普通jar中,包括实体类。尝试将beans.xml添加到API jar,但当用户是API jar文件中的JPA注释实体类时,仍然出现错误“User is not mapped”。如果我将空的
标记添加到persistence.xml,或者添加一个带有完全限定类名的
标记,它就可以工作。但是由于上面列出的原因,我不想这样做。也许你可以试试
jboss部署结构.xml
@MorganP你现在找到了解决问题的方法了吗?另外,感谢使用空参数的解决方法。在找到其他方法之前,我将使用这种方法而不是属性。不,我从来没有这样做过。多伤心啊。我们仍然在项目的第一阶段使用EAR部署。几个月后,我们将开始下一个阶段,我将再次讨论这个问题。自从我发布了这个问题以来,我对Maven已经感到非常舒服了,所以也许我会找到一种很好的干净方法,基于包含的JAR动态地构建persistence.xml。