Foros del Web » Programación para mayores de 30 ;) » Java »

Duda representar relación con Hibernate

Estas en el tema de Duda representar relación con Hibernate en el foro de Java en Foros del Web. Hola, Acabo de empezar a utilizar hibernate y no se como solucionar una relación de mi BD. Tengo las siguientes tablas: Centros: id nombre id_registro_anulado ...
  #1 (permalink)  
Antiguo 15/01/2014, 06:06
 
Fecha de Ingreso: junio-2012
Ubicación: Cerca del mar
Mensajes: 19
Antigüedad: 11 años, 9 meses
Puntos: 0
Duda representar relación con Hibernate

Hola,
Acabo de empezar a utilizar hibernate y no se como solucionar una relación de mi BD.
Tengo las siguientes tablas:

Centros:
id
nombre
id_registro_anulado (FK)


Conceptos:
id
nombre
id_registro_anulado (FK)


Registros_Anulados:
id
fecha
usuario
motivo

Como véis tengo una tabla donde almaceno todos los registros "anulados" y a su vez cada tabla tiene una foreign key que apunta a un registro en Registros_Anulados. No todos los registros de Centros y Conceptos tendrán una línea en Registros_Anulados.

He creado 3 clases en java para cada una de las tablas. Además las 2 primeras heredan de una "superclase" que tiene como propiedades id_registro_anulado y quería que tubiese también un objeto RegistroAnulado. Este objeto por defecto será null pero si el el centro o concepto está anulado se instanciará con sus datos.

Como puedo indicar está relación? Estoy utilizando anotaciones en las clases y no se como debo anotar el objeto RegistroAnulado.

Espero haberme explicado.
Gracias de antemano!
  #2 (permalink)  
Antiguo 16/01/2014, 12:35
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Duda representar relación con Hibernate

Hola,

Posiblemente, esta una pregunta de base de datos mas que de Hibernate.

Cita:
Iniciado por ProgramadorJunior Ver Mensaje
... Como véis tengo una tabla donde almaceno todos los registros "anulados" y a su vez cada tabla tiene una foreign key que apunta a un registro en Registros_Anulados. ...
El problema es que esa relación no es válida en un diagrama relacional, sin un discriminador intermedio; es decir, ¿cómo sabes a que tabla pertenece el registro anulado? Si en esta última es posible meter registros duplicados de las dos tablas. Normalmente, aunque no es regla, se llaman tablas de movimientos y no creo que sea adecuado usar un ORM para tablas de movimientos no relacionadas.

Yo aconsejaría que preguntaras como realizar esa relación correctamente el el área de base de datos y después lo resuelvas en Hibernate.

Saludos,
  #3 (permalink)  
Antiguo 12/02/2014, 11:02
 
Fecha de Ingreso: junio-2012
Ubicación: Cerca del mar
Mensajes: 19
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Duda representar relación con Hibernate

Gracias HackmanC,
Aquí el post sobre la relación de la BD http://www.forosdelweb.com/f21/duda-sobre-como-representar-relacion-1091004/
  #4 (permalink)  
Antiguo 12/02/2014, 18:28
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Duda representar relación con Hibernate

Hola,

Posiblemente lo puedas implementar de la siguiente forma, de seguro me adelanté a decir que no era posible porque el discriminador puede ser, como en este caso, el nombre de la misma tabla.

Posiblemente podrías anotar Registros_Anulados con:

Código Java:
Ver original
  1. @OneToMany(cascade = CascadeType.ALL, mappedBy = "registrosAnuladosCentros")
  2.     private Collection<Centros> centrosCollection;
  3.  
  4.     @OneToMany(cascade = CascadeType.ALL, mappedBy = "registrosAnuladosConceptos")
  5.     private Collection<Conceptos> conceptosCollection;

Y en Centros y Conceptos algo así en cada uno,

Código Java:
Ver original
  1. @JoinColumn(name = "Id", referencedColumnName = "id_registro_anulado")
  2.     @ManyToOne()
  3.     private RegistrosAnulados registrosAnuladosCentros;
Saludos,

Etiquetas: hibernate
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:17.