Se sabe que Hibernate esta diseñado para administrar la persistencia de las base de datos tratando de simplificar la cantidad de código, realizando un puente entre las base de datos y la POO, es decir manejar el acceso a datos a tal nivel que se pueda realizar a nivel de objetos.
Pero también es un framework diseñado para bases de datos con una buena integridad referencial, por lo tanto es un poco complejo tratar con base de datos con una pobre entidad relación, por ende me refiero al siguiente problema:
Tengo una base de datos con este escenario pero como es una base de datos que es muy poco factible que se pueda cambiar el modelo de datos.
El problema radica en que se está realizando una sentencia con dos tablas, una con llave primaría y otra sin llave primaria, estas dos no estan relacionadas en la base de datos. Las cuales se debe realizar una consulta para relacionar ya que tiene datos en común pero el problema es que lógicamente la tabla que no tiene llave primaria me trae el número de datos correcto pero todas la ocurrencias duplicadas con el primer dato de las mismas.
Se ha intentado solucionar el problema manejando sentencias con el método nativo y agregando las clases con el método correspondiente pero sigue presentando el problema cuando son sentencias que consultan dos tablas al tiempo.
Código:
createSQLQuery() // Método nativo para realizar la consulta a la BD addEntity(alias, clase.class) // Método para agregar alias que no tienen relación en la base de datos y adicionalmente agregar tablas correspondiente.
Anteriormente tenía el método de trasformación con el cual se soluciona el problema de la duplicidad, pero, solamente en una sola tabla.
Código:
Si el método anterior se intenta implementar en una consulta que contenga más de una tabla no funciona correctamente, ya que define los alias de los atributos de ambas tablas con la última tabla que se realiza la transformación y por ende no encuentra los campos de la primera tabla ya que los busca en la segunda, por que el alias corresponde a la segunda tabla.consulta.setResulsetTransformer(Transformer.aliastobean(clase.class)) // Agrega alias a la tabla y transforma la sentencia trayendo los datos correctos y no duplicados.
He estado mirando el api y la documentación y consultando en internet pero no existe temas relacionados a este problema específico para este pequeño chicharón peludo.
Por lo tanto quiero saber si existe un método que se comporte muy similar al método de transformación o si hay otro método que soluciona el problema de duplicidad y datos incompletos de tablas sin llaves primarías para probarlo.
O si definitivamente mi segunda alternativa es encontrar la tabla que contenga los datos más completos y con estos datos traer los datos de la segunda tabla con un atributo que tiene relación como se encuentra actualmente . Ya que hay que actualizar las dos tablas.
(Los datos que se encuentran en una tabla siempre estan en la otra por lo menos lo que se pueden relacionar).
Gracias por su respuesta y atención.