Base de datos multiinquilino con ID de inquilino: problemas de asignación de clave externa de Hibernate con inserción

Estoy usando Hibernate para mi aplicación web y usé ingeniería inversa para crear mis asignaciones, modelos y clases DAO.

En mi base de datos, todas las tablas tienen un identificador de inquilino y un campo clave adicional como PK compuesto. Tengo algunas relaciones FK. Por lo tanto, todas las relaciones FK se mapean en ambos campos (es decir, la clave compuesta).

El archivo de asignación resultante generado tiene la siguiente asignación de muchos a uno

<hibernate-mapping> 
<class name="table1" table="table1" catalog="x"> 
<composite-id name="id" class="tbl1Id"> 
    <key-property name="prop1Id" type="int"> 
        <column name="prop1Id" /> 
    </key-property> 
    <key-property name="tenantId" type="int"> 
        <column name="tenantId" /> 
    </key-property> 
</composite-id> 
<many-to-one name="table2" class="table2" update="false" insert="false" fetch="select"> 
    <column name="propXId" /> 
    <column name="tentantId" not-null="true" /> 
</many-to-one> 
....

propXId y TenantId son las claves principales de table2.

Como puede ver, la actualización y la inserción se establecen en falso y, en consecuencia, propXId no se inserta en la tabla 1 cuando intento insertar datos en la tabla 1.

Cuando traté de cambiar la actualización e insertar atributos a 'verdadero', hibernate arroja un error de mapeo, con el siguiente mensaje

..Repeated column in mapping for entity: table1 column: TenantId (should be mapped with insert="false" update="false") .. 

Según tengo entendido, dado que TenantId ya forma parte del PK de table1, no puede volver a agregarlo. Pero debido a eso, no está insertando el propXid también. Y eso no está bien en mi opinión.

TenantId está allí solo para cuidar de Multitancy, pero la relación real está en propXid. Pero la adición de tentId parece estar causando este problema con Insertar.

Por favor, hágame saber si hay una manera de arreglar esta asignación. De lo contrario, la única otra forma en la que podría pensar es quitar TenantId de PK, lo que significaría que todos mis prop1Id y propXids tienen que ser únicos en todos los inquilinos. Y esa no es una buena solución para mí.

O podría forzar una inserción a través de un HQL/SQL después de verificar FK a través del código, lo que tampoco es una situación ideal. Busque su consejo sobre cuál podría ser el camino correcto aquí.

preguntado el 27 de julio de 12 a las 14:07

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.