2009-03-27 25 views
10

Es una situación bastante común en nuestras aplicaciones que alguna entidad deba ser representada por una enumeración: por ejemplo, tipos, categorías, estado y cosas por el estilo.¿Cómo manejar la duplicación entre java enum y la tabla de la base de datos?

A menudo, hay condiciones o flujos en el código que usan los valores para decidir entre una acción u otra, por lo que los valores deben ser "conocidos" de alguna manera para la aplicación (es decir, debe poder referirse a una instancia específica para decidir en lugar de hacer referencia a la clase en un todo). Es por eso que utilizamos enumeraciones en lugar de solo una clase regular.

El problema es que estas entidades también necesitan ser almacenadas (o al menos referenciadas) en la base de datos, como campos de otras entidades. Usualmente creamos una tabla para cada entidad, para poder tener verificaciones de integridad referencial en estas columnas, y también que los datos tienen un "significado" solo en la base de datos sin la necesidad de consultar la enumeración para averiguar qué significa cada identificación. .

Idealmente, los datos para estas entidades se deben llenar a partir de los datos en la enumeración, pero hoy en día tenemos los valores duplicados en los scripts de inicialización de db.

Se vuelve un poco más complicado cuando se utiliza un ORM como Hibernate.

Me gustaría saber cómo otras personas manejan este tipo de situación.

No estoy del todo cómodo con la idea de tener una duplicación entre una enumeración y una tabla de base de datos, pero todavía no he encontrado una mejor solución.

+1

Esto se ha preguntado muchas veces antes - mire los enlaces "relacionados" en el lado derecho –

Respuesta

2

Prueba las respuestas a esta pregunta: Ways to save enums in database

+0

Es una pregunta muy similar, no la he encontrado antes. Aún así, parece que no hay una solución fácil, ya que ninguna de las respuestas parece resolver los problemas. – Sam

1

que tienen el mismo problema para mi JPA/Hibernate aplicación. Lo que hago es crear dinámicamente la entrada enum en la base de datos a medida que se encuentran. En este caso, se completa automáticamente según sea necesario.

Cuestiones relacionadas