从JBoss模块自动检测JPA实体

时间:2016-01-29 12:12:41

标签: hibernate jpa jboss jboss-eap-6 persistence.xml

我有一个EJB模块 M ,包含在EAR模块中。

M 依赖于jar文件 data-model.jar ,安装为 JBoss模块并使用 jboss-deployment-structure.xml 文件。

该模块没有任何问题,但我无法帮助将每个实体添加为persistence.xml中的<class>标记。

<?xml version="1.0" encoding="UTF-8"?>
<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="persistenceUnitName" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:/datasource</jta-data-source>

    <class>com.bla.persistence.entity.EntityOne</class>
    <class>com.bla.persistence.entity.EntityTwo</class>
    ...

所以问题是:有没有办法指定与持久性单元关联的持久托管类从JBoss模块加载它们,而不是将它们全部作为类标记添加到persistence.xml中? < / p>

默认情况下,持久性单元与持久性单元根目录中包含的带注释的托管持久性类相关联 ed persistence.xml所在的jar文件) (docs)。

我尝试过添加:

<exclude-unlisted-classes>false</exclude-unlisted-classes>

但它没有改变任何东西(我已经读过Java EE应用程序无论如何都使用这个值作为默认值。)

我也可以使用:

 <jar-file>?</jar-file>

但我不知道如何引用JBoss模块(并且硬编码模块的文件名称对我来说似乎是一种非常糟糕的做法)。

使用:

  • JBoss EAP 6.4
  • Hibernate 4.2.18
  • JPA 2

1 个答案:

答案 0 :(得分:1)

您无需在persistence.xml

中将实体添加为<class>标记

只需在persistence.xml

中添加自动扫描参数即可
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<property name="hibernate.archive.autodetection" value="class, hbm" />

为了使这个工作,persistence.xml和实体对象应该在同一个类路径中。

如果你在同一个类路径中没有persistence.xml,那么实体会在persistence.xml中添加这个配置

<persistence ...>
<persistence-unit ...>
    <jar-file>${project.build.outputDirectory}</jar-file>
    ...
</persistence-unit>