Resulta que tengo alumnos y cursos. Un alumno puede inscribirse a varios cursos 
y un curso tiene varios alumnos, asi que mi base de datos tiene tres tablas:

 

Alumnos: id, nombre

Cursos: id, nombre

Alumnos_Cursos: id_Alumno, id_Curso

 

Una simple relacion many to many, tres tablas desde el punto de vista 
relacional, dos clases desde POO. Ahora bien, resulta que ademas tengo que 
almacenar la fecha en que el alumno se inscribio al curso, a simple vista el 
lugar indicado para guardar este dato me parece que es la tabla Alumnos_Cursos, 
con lo cual me quedaria asi:

 

Alumnos: id, nombre

Cursos: id, nombre

Alumnos_Cursos: id_Alumno, id_Curso, fecha_inscripcion

 

Ahora desde el punto de vista POO no me queda mas remedio que tener tres 
clases, una para el alumno, una para el curso y otra para RelacionCursoAlumno, 
con lo cual un objeto alumno tiene una coleccion de RelacionCursoAlumno, un 
curso tambien tiene una de estas colecciones y una RelacionCursoAlumno tiene 
adentro un Alumno y un Curso. Necesito saber todos los alumnos de un curso con 
sus fechas de inscripcion y tambien conocer todos los cursos de un alumno con 
sus fechas de inscripcion, es por eso que necesito estas relaciones inversas.

 

Todo esto lo voy a implementar con java utilizando JPA/Hibernate, hasta ahora 
lo hice funcionar pero tuve que agregar un dato extra en la tabla 
Alumnos_Cursos, ya que como una RelacionCursoALumno es una entidad tiene que 
tener su id, asi que tuve que agregar un campo id:

 

Alumnos_Cursos: id, id_Alumno, id_Curso, fecha_inscripcion

 

El tema es que este campo id esta de mas ya que id_Alumno union id_Curso forman 
una clave primaria (seria un error que un alumno este inscripto dos veces en el 
mismo curso).

La pregunta es, como hago para mapear una clave compuesta en JPA en este caso? 
En todos los ejemplos que encuentro hay que crear una clase especifica para la 
clave primaria compuesta, pero pero entre ensuciar mi modelo de objetos y 
ensuciar mi base de datos prefiero ensuciar mi base de datos, cual es la mejor 
manera que se les ocurre para implementar esto en java con JPA? Especificamente 
pregunto como hacer el mapeo de la clave primaria de la clase 
RelacionCursoAlumno.

_________________________________________________________________
¿Querés saber cómo va a estar el clima mañana? Ingresá ahora a MSN
http://tiempo.ar.msn.com/ 
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a