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
是否可以使用JPA和hibernate扫描jar文件中的实体_Hibernate_Jpa_Hibernate Mapping - Fatal编程技术网

是否可以使用JPA和hibernate扫描jar文件中的实体

是否可以使用JPA和hibernate扫描jar文件中的实体,hibernate,jpa,hibernate-mapping,Hibernate,Jpa,Hibernate Mapping,我有以下情况: 项目A-包含几个实体并且是独立的 项目B-包含几个实体,并且是独立的 项目C-包含很少的实体,并且依赖于项目A和项目B 我使用Maven来管理依赖项和构建 当我试着测试项目A和项目B时,结果很好。它们每个都有一个persistence.xml和一个单独的持久上下文 当我运行projectc时,它会映射任何实体。我已经尝试使用自动检测,指定了jar文件属性。。。但似乎什么都不管用 它给了我一个映射异常,表示未知实体,不会持久化或读取项目a或B中的实体。我在这里发布了3个pers

我有以下情况:

  • 项目A-包含几个实体并且是独立的
  • 项目B-包含几个实体,并且是独立的
  • 项目C-包含很少的实体,并且依赖于项目A和项目B
我使用Maven来管理依赖项和构建

当我试着测试项目A和项目B时,结果很好。它们每个都有一个persistence.xml和一个单独的持久上下文

当我运行projectc时,它会映射任何实体。我已经尝试使用自动检测,指定了jar文件属性。。。但似乎什么都不管用

它给了我一个映射异常,表示未知实体,不会持久化或读取项目a或B中的实体。我在这里发布了3个persistence.xml文件

此外,我尝试使用class属性和相同的持久上下文,但它就是找不到文件

非常感谢您的帮助

提前谢谢

<persistence 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_1_0.xsd" version="1.0">
    <persistence-unit name="A" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="username"/>
      <property name="hibernate.connection.password" value="password"/>
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@webdev.epi.web:1521/webdev.world"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.archive.autodetection" value="class"/>
    </properties>

        </persistence-unit>
</persistence>

<persistence 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_1_0.xsd" version="1.0">
    <persistence-unit name="B" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="username"/>
      <property name="hibernate.connection.password" value="password"/>
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@webdev.epi.web:1521/webdev.world"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.archive.autodetection" value="class"/>
    </properties>

        </persistence-unit>
</persistence>

<persistence 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_1_0.xsd" version="1.0">
    <persistence-unit name="C" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jar-file>A-0.0.1-SNAPSHOT.jar</jar-file>
                    <jar-file>B-0.0.1-SNAPSHOT.jar</jar-file>
        <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="username"/>
      <property name="hibernate.connection.password" value="password"/>
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@webdev.epi.web:1521/webdev.world"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.archive.autodetection" value="class"/>
    </properties>

        </persistence-unit>
</persistence>

org.hibernate.ejb.HibernatePersistence
org.hibernate.ejb.HibernatePersistence
org.hibernate.ejb.HibernatePersistence
A-0.0.1-SNAPSHOT.jar
B-0.0.1-SNAPSHOT.jar

事实上,我找到了一种让它工作的方法。 在项目A和B中,我自动检测我的实体,在项目C中,我显式地列出映射的类,这些实体现在被映射,并且可以工作


希望它能帮助别人

要在项目C中启用自动检测,您可以自己扫描类路径并注册JPA实体以编程方式休眠。因此,不需要在persistence.xml中显式列出这些实体。有关更多信息,请参见此处: