La asociación unidireccional one to many a una clase hija da problemas en Hibernate
- 4 May, 2006 //
- informática, java, trabajo //
- Tags :
- 1 Comment
Después de muchas horas trabajando en el asunto, he descubierto que el Hibernate no trabaja bien con asociaciones unidirireccionales uno a muchos (one to many) donde el lado de los muchos es una clase padre y la asociación real quiere hacerse a una clase hija. Esto pasa cuando las clases hijas se modelan con una tabla separada cada una (quizá no pase cuando se hace con un discriminador, no lo he comprobado).
Por ejemplo, tengo una clase Calendario que se asocia en modo uno a muchos de forma unidireccional a una clase Componente. Componente es abstracta de modo que la relación solo tiene sentido con las clases hijas de Componente, en este caso, una clase Evento.
Lo que ocurre es que en la base de datos se modelan esas relaciones colocando una clave ajena (foreign key) en la entidad del lado de muchos. Sin embargo, cuando se recorre la relación desde el lado del uno, internamente se coge el lado de los muchos y se comprueba cuales de esos registros tienen como clave ajena a la entidad del lado del uno.
Sea como fuere, Hibernate decide no realizar esa comprobación teniendo en cuenta las clases hijas.
En la documentación advierte que este tipo de relación es bastante problemática y que se utilice una relación bidireccional. Dicho y hecho, la cosa ahora funciona sin mayores problemas.
Menudo quebradero de cabeza.