2011-05-17 59 views
6

在我的Java/Seam/JbossAS應用程序中,我決定將我的Model類(hibernate實體)外化並將它們移到另一個項目中。該項目生成model.jar,然後由主應用程序使用。 model.jar依賴由Ivy解決。 用Ant構建主要應用程序毫無問題。然後我手動將model.jar複製到'mainapp.ear/lib'目錄中。之後,我部署了應用程序,並且沒有任何問題(儘管我注意到沒有關於找到的映射的日誌信息)。但是,當我想登陸,我得到異常:將實體移動到外部jar包後未映射

javax.el.ELException: javax.ejb.EJBTransactionRolledbackException: 
    org.hibernate.hql.ast.QuerySyntaxException: AppUser is not 
    mapped [select u from AppUser u where u.userName = :usernamePar] 

有在此期間沒有代碼的變化,只是外化一些類,裝入瓶內。這是否意味着,在編譯主應用程序時需要Model類的源代碼?

+0

您的主應用程序根目錄中是否包含hibernate.cfg.xml文件? – 2011-05-17 16:02:51

+0

@Rafa de Castro Hibernate配置通過persistance.xml文件完成(路徑是'app.ear/app.jar/META-INF/persistence.xml')文件,映射通過註釋完成 - 也許這是問題? – user1293910asd 2011-05-18 07:42:57

回答

5

EntityManagerFactory是專爲只掃描具有/META-INF/persistence.xml文件的jar的掃描實體而構建的。

爲了掃描其他的罐子,你必須使用<jar-file>

<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_2_0.xsd" 
      version="2.0"> 
    <persistence-unit name="manager1" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:/DefaultDS</jta-data-source> 
     <mapping-file>ormap.xml</mapping-file> 
     <jar-file>MyApp.jar</jar-file> 
     <class>org.acme.Employee</class> 
     <class>org.acme.Person</class> 
     <class>org.acme.Address</class> 
     <shared-cache-mode>ENABLE_SELECTOVE</shared-cache-mode> 
     <validation-mode>CALLBACK</validation-mode> 
     <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

參見2.2.1包裝在Hibernate doc

+0

是的,標籤固定的東西,謝謝! – user1293910asd 2011-05-19 07:35:01

+0

也需要手動添加類 – april26 2012-04-02 19:27:23

0

同時檢查你的休眠映射是否正確放置在hibernate配置文件中。請注意,hibernate映射資源或類相對於hibernate.cfg.xml文件的位置。

+0

那麼,映射是通過註釋完成的 - 是這個問題嗎? – user1293910asd 2011-05-18 07:46:03