Tengo un esquema de base de datos existente que intento ORM'ise con anotaciones JPA/Hibernate. El esquema está diseñado para permitir a los clientes asociar información adicional con cada fila en una tabla. En lugar de utilizar un patrón de clave-valor , la solución existente determina el número requerido de columnas dinámicas en el momento de la instalación y altera la tabla a para agregar columnas adicionales para los campos dinámicos. En efecto, cada tabla tiene un conjunto de columnas conocidas y fijas y un grupo de columnas dinámicas.Columnas dinámicas de asignación de JPA/Hibernate como una lista de objetos
|table:X|
|id|known1|known2|dynamic1|dynamic2|..|dynamicx|
una tabla de parámetros indica qué tablas tienen campos adicionales dinámicos
|table:parameter|
|table|column|meta|
|x|dynamic1||
|x|dynamic2||
|x|dynamicx||
|y|dynamic15||
En JPA modelado esto, es fácil crear una definición para las columnas fijas conocidas en cada mesa.
@Entity
@Table(name="x")
public class X
{
@Id
private Long id = null;
@Column(name="known1")
private Long known1 = null;
}
planeo para modelar la tabla de parámetros como clase, y luego permitir que cada una de mis clases para tener una lista de parámetros. No estoy seguro de cómo debería hacer para mapear este objeto List para que los detalles se escriban en la misma tabla.
@Entity
@Table(name="x")
public class X
{
// @Column(name="x",class="X") ??????????
List<Parameter> dynamicColumns = null;
}
Creo que puedo utilizar una estrategia de nomenclatura personalizada para determinar correctamente el nombre de columna para el campo dinámico. ¿Es este tipo de mapeo posible?
espero que son capaces de cambiar la base de datos ... esto suena como un esquema que necesita un poco de normalización. – Zoidberg
para esta pregunta supongamos que no puedo. Creo que estoy cerca de golpear la pared de ladrillos. – emeraldjava