2012-03-22 35 views
2

我有以下情况:是否有可能使用JPA扫描实体的jar文件和休眠

  • A计划 - 包含了一些实体和独立
  • B项目 - 包含了一些实体是独立
  • 项目C - 包含一些实体和依赖于项目A &项目B.

我使用Maven来管理依赖关系,并建立。

当我尝试测试项目A和项目B时,它通过罚款。他们每个人都有一个persistence.xml和一个单独的持久性上下文。

当我运行项目C时,它确实映射了任何实体。我试图使用自动检测,指定jar文件属性...但似乎没有任何工作。

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

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

任何帮助真的很感激。

在此先感谢!

<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> 

回答

1

其实,我找到了一种方法来使它工作。 在项目A & B,我自动检测我的实体,并在项目C中,我明确列出映射的类,实体现在得到映射,它的工作原理。

希望它可以帮助别人!

0

要在项目C中启用自动检测,您也可以自己扫描类路径并以编程方式将JPA实体注册到Hibernate。因此不需要在persistence.xml中明确列出这些实体。欲了解更多信息,请参阅这里:https://stackoverflow.com/a/41845759/377320