2012-03-22 36 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