2012-01-11 22 views
6

Tengo una aplicación web basada en Seam 2.2 Java EE 5 con un conjunto de tablas asignadas a entidades JPA 1.0 a través de Hibernate 3.3.3. Durante el desarrollo se ejecuta en un Tomcat 6, Oracle 10 XE y Windows 7.JPA Entiy en sinónimo en lugar de tabla

Ahora, tuvimos el departamento de solicitud de operaciones para dividir el modelo de datos en un esquema que es el propietario de todos los objetos de base de datos (myschema) y un esquema actuando como el usuario de la base de datos de la aplicación (myschema_app). Así que hice lo siguiente:

  • crear esquema myschema_app
  • derechos de objeto de subvención en todas las tablas necesarias de myschema (tanto las normales y n: m tablas intermedias) y secuencias en función del uso (una o más de select , insert, update, delete) a myschema_app
  • declaran sinónimos privados en myschema_app con el fin de utilizar los mismos nombres que antes y ocultar el nombre del otro esquema de prefijo
  • cambio de propiedad hibernate.default_schema a nombre nuevo esquema en persistence.xml
  • cambio de usuario/contraseña en la definición de origen de datos de Tomcat en context.xml

Cuando se inicia la aplicación mientras se hibernate.hbm2ddl.auto conjunto de validate, consigo una excepción cuando el marco intenta crear la EntityManagerFactory diciéndome que falta una mesa. Cuando ejecuto una instrucción select directamente en una herramienta SQL con myschema_app conectado, todo funciona bien.

Entendí que el uso de un sinónimo en otra mesa es transparente para la aplicación. ¿Alguien tiene una idea de lo que pude haber pasado por alto?

Respuesta

8

Supongo que hbm2ddl se refiere específicamente a tablas, y no a sinónimos, pero que su aplicación debería funcionar como si las tablas existieran en el esquema. Intenta eliminar la opción hbm2ddl y prueba tu aplicación.

EDIT: parece que mi conjetura es verdadera: https://forum.hibernate.org/viewtopic.php?p=2438033

+0

Esa era una respuesta rápida, 10 puntos ganados. Sí, ya he visto que omitir ese parámetro hace que la aplicación funcione, pero es una pena que Hibernate no admita sinónimos durante la validación, porque creo que es bueno validar el esquema al inicio para asegurarse de que se ajusta a la aplicación . –

+0

El problema está en la clase hibernates org.hibernate.tool.hbm2ddl.DatabaseMetadata donde los tipos de tabla están codificados en private static final String [] TYPES = {"TABLE", "VIEW"}; donde realmente debería estar private static final String [] TYPES = {"TABLE", "VIEW", "ALIAS", "SYNONYM"}; – user482745

Cuestiones relacionadas