2011-05-17 58 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