Pregunta

Nos encontramos con un extraño comportamiento hibernado con hbm2ddl.auto ajustado a update.

En nuestra configuración de prueba, tenemos dos usuarios de bases de datos, uno que contiene las tablas para nuestra aplicación beta, la otra se usa principalmente para el desarrollo. Es decir, los mismos nombres de mesa con diferentes usuarios. Cuando se crean nuevas tablas, lo hacemos usando hbm2ddl.auto=update.

Ahora, de repente, el comportamiento extraño es: el proceso de actualización busca tablas existentes con el usuario equivocado y crea aquellos que no se encuentran con el usuario correcto.

Por ejemplo, si existe las siguientes tablas

USER_A.TABLE_1
USER_B.TABLE_2

Y actualizamos con tres tablas configuradas: TABLE_1, TABLE_2, TABLE_3 Usando user_b, terminamos con

USER_A.TABLE_1
USER_B.TABLE_2
USER_B.TABLE_3

TABLE_1 no se crea para USER_B. Después de cambiar el nombre USER_A.TABLE_1 a USER_A.TABLE_0 y actualizando nuevamente terminamos con el resultado esperado:

USER_A.TABLE_0
USER_B.TABLE_1
USER_B.TABLE_2
USER_B.TABLE_3

¿Tiene esto sentido para alguien? ¿Hay algo así como un caché de hibernación interno que recuerda como "Hola, ya he creado esta tabla en este servidor (y no me importa el usuario)".

Hemos gastado algunas pruebas para asegurar que este no es un problema de configuración, reproducimos esto en diferentes máquinas, diferentes configuraciones, de Ant o utilizando el IDE, asegurándose de que la contraseña de User_A no se pueda encontrar en ningún lugar del directorio de compilación, etc., por lo que estamos al 100% Claro, el comportamiento es como se describe, pero estamos completamente fuera de ideas lo que sucede.

Estaría muy feliz de escuchar sus ideas sobre esto, ya que este problema es molesto desde hace algún tiempo.

Muchas gracias Peter

¿Fue útil?

Solución

¿Hay algo así como un caché de hibernación interno que recuerda como "Hola, ya he creado esta tabla en este servidor (y no me importa el usuario)".

No. Lo que probablemente esté sucediendo es que USER_A puede ver las tablas creadas en la cuenta user_b y viceversa. No está claro qué base de datos está utilizando, pero intentaría configurar Hibernate para usar dos esquemas diferentes, además de usar solo usuarios diferentes. También puede intentar establecer la propiedad "hibernate.default_schema", pero no estoy seguro de que esto solo resuelva su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top