2012-08-10 21 views
18

Tengo dos entidades de base de datos: Forum y Topic.JPA: anotación de clave externa

Topic tiene protected long forumId miembro de datos, lo que indica, por supuesto, el foro de Topic.

Mi pregunta es qué anotación usar para este miembro de datos?

+0

No necesita declarar 'forumId' en' Topic'. –

+0

¿por qué dices eso? Creo que es necesario porque tengo que saber a qué foro pertenece el tema – socksocket

+1

@socksocket Creo que es porque puedes anotar un atributo 'Forum', especificando el id con una anotación' @ JoinColumn', mira mi respuesta. ;) – elias

Respuesta

25

Como Foro tiene muchos temas, y un tema pertenece a una y sólo Forum, es probable que quiera ir con un atributo Forum Tipo anotado con @ManyToOne:

@ManyToOne 
@JoinColumn(name = "forumId") 
private Forum forum; 

Ver más:

ManyToOne y JPA mapping

+5

pero el "problema" en este caso es que cuando serializa su tema a XML o JSON (para pasarlo a un cliente, por ejemplo), todo el objeto del foro también se serializará de manera predeterminada ... lo mismo si subes un tema a tu servidor, necesitas pasar los objetos completos de Topic + Forum, no puedes usar el id del foro. En algunos casos, parece más fácil simplemente insertar manualmente la clave externa de la entidad relacionada. – splinter123

1

@ManyToOne Como la anotación implica - que tiene muchos temas por el foro

5

Como han respondido otros -
Debe utilizar las anotaciones ManyToOne y JoinColumn.
Desnudo en cuenta, que desde JPA se trata de ORM - mapeo objeto-relacional,
Se debe hacer referencia a otro objeto como lo habría hecho "natural" en Java - es decir, a través de un objeto y no a través de su identificador (el cual es ForumID) en su caso),
Esta fue una de las consideraciones de diseño entre las relaciones en JPA e Hibernate (previamente a JPA).

Cuestiones relacionadas