JPA: clave externa de anotación

Tengo dos entidades de bases de datos: Forum y Topic.

Topic ha protected long forumId miembro de datos, que indica de curso de la Topic‘s del foro.

Mi pregunta es, ¿qué anotación a utilizar para este miembro de datos?

  • No es necesario declarar que forumId en Topic.
  • ¿por qué lo dices? Creo que es necesario porque tengo que saber que el foro el tema pertenece a
  • Yo creo que es porque se puede anotar un atributo Forum, especificando el número de identificación con un @JoinColumn anotación, ver mi respuesta. 😉
InformationsquelleAutor socksocket | 2012-08-10

3 Kommentare

  1. 34

    Como Foro tiene muchos temas, y un tema que pertenece a una y sólo el Foro, usted probablemente querrá ir con un Foro atributo de tipo anotado con @ManyToOne:

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

    Ver más:

    ManyToOne y JPA asignación de

    • pero el «problema» en este caso es que cuando se serializa el Tema de XML o JSON (para pasarlo a un cliente, por ejemplo), el Foro entero objeto también será serializado por defecto… lo mismo si subes un tema para su servidor, usted necesita para pasar todo el Tema+Foro de objetos, usted simplemente no puede usar el id del foro. En algunos casos, parece más fácil insertar manualmente la clave foránea de la entidad relacionada.
    • Cómo resolver sólo el forumId en su ejemplo/caso??
    • si configura la inicialización perezosa, obtendrá sólo el id (no unirse necesario) si sólo getForum().getId(). Ver: stackoverflow.com/questions/32220951/…
  2. 5

    Como otros han respondido –

    Usted debe utilizar el ManyToOne , y JoinColumn anotaciones.

    Desnudo en cuenta , que desde JPA es acerca de ORM – mapeo Objeto relacional,

    Usted debe hacer referencia a otro objeto como habría hecho «naturalmente» en Java me.e a través de un objeto y no a través de su identificador (que es forumId) en su caso),

    Este fue uno de los diseño de consideración entre las relaciones JPA e Hibernate (previamente a JPA).

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea