2011-05-17 11 views
6

En mi aplicación Java/Seam/JbossAS, decidí externalizar mis clases de modelo (entidades de hibernación) y las moví a otro proyecto. El proyecto produce model.jar, que luego es utilizado por la aplicación principal. La dependencia model.jar es resuelta por Ivy. Creando la aplicación principal con Ant funciona sin problemas. Luego copio manualmente el modelo.jar en el directorio 'mainapp.ear/lib'. Después, despliego la aplicación y no hay problemas (aunque noto que no hay información de registro sobre las asignaciones encontradas). Pero cuando quiero entrar, me da la excepción:Entidades no asignadas después de moverlas al paquete de jar externo

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

No hubo cambios en el código, mientras tanto, simplemente exteriorizar algunas de las clases en un frasco. ¿Significa esto que necesito el código fuente de las clases de modelo al compilar la aplicación principal?

+0

¿Su archivo hibernate.cfg.xml está en la raíz de su aplicación principal? –

+0

@Rafa de Castro La configuración de Hibernate se realiza a través del archivo persistance.xml (la ruta es 'app.ear/app.jar/META-INF/persistence.xml'), las asignaciones se hacen a través de anotaciones, tal vez este sea el ¿problema? – user1293910asd

Respuesta

5

El EntityManagerFactory está diseñado para escanear entidades solo desde el contenedor que tiene un archivo /META-INF/persistence.xml.

Con el fin de explorar otros frascos que tienen que utilizar <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> 

Ver 2.2.1 Envasado en Hibernate doc.

+0

Sí, la etiqueta solucionó el problema, ¡gracias! – user1293910asd

+0

también necesitan agregar manualmente las clases – april26

0

También verifique si sus asignaciones de hibernación están colocadas correctamente en el archivo de configuración de hibernación. Tenga en cuenta que las clases o los recursos de mapeo de hibernación son relativos a la ubicación del archivo hibernate.cfg.xml.

+0

Bueno, las asignaciones se hacen a través de anotaciones: ¿ese es el problema? – user1293910asd

Cuestiones relacionadas