2012-08-10 8 views
18

Ich habe zwei Datenbankeinheiten: Forum und .JPA: Fremdschlüssel Annotation

Topic hat protected long forumId Daten Mitglied, die natürlich die 's Forum angibt.

Meine Frage ist, welche Annotation für dieses Datenelement verwendet werden soll?

+0

Sie müssen diese 'forumId' nicht in' Topic' deklarieren. –

+0

Warum sagst du das? Ich denke, es ist notwendig, weil ich wissen muss, welches Forum das Thema gehört – socksocket

+1

@ Socksocket Ich denke, es ist, weil Sie ein Attribut "Forum" kommentieren können, die ID mit einem '@ JoinColumn' Annotation, siehe meine Antwort. ;) – elias

Antwort

25

Als Forum viele Themen hat, und ein Thema gehört zu einem und nur Forum, möchten Sie wahrscheinlich mit einem Forum type-Attribut mit @ManyToOne kommentierte gehen:

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

Weitere:

ManyToOne und JPA mapping

+5

aber das "Problem" in diesem Fall ist, dass, wenn Sie Ihr Thema zu XML oder JSON serialisieren (um es zum Beispiel an einen Klienten zu übergeben), das gesamte Forum-Objekt auch serienmäßig serialisiert wird ... dasselbe, wenn Wenn Sie ein Thema auf Ihren Server hochladen, müssen Sie die gesamten Topic + Forum-Objekte übergeben. Sie können nicht einfach die Forum-ID verwenden. In manchen Fällen scheint es einfacher, den Fremdschlüssel der verknüpften Entität einfach manuell einzufügen. – splinter123

1

@ManyToOne Als Anmerkung schon sagt - Sie viele Themen pro Forum

haben
5

Da andere geantwortet haben -
Sie sollten die Annotationen ManyToOne und JoinColumn verwenden.
Bedenken Sie, dass es sich bei JPA um ORM - Object relationales Mapping handelt,
Sie sollten auf ein anderes Objekt verweisen, wie Sie es "natürlich" in Java getan hätten - also über ein Objekt und nicht über seinen Bezeichner (forumId) Ihr Fall),
Dies war eine der Entwurfsüberlegungen zwischen den Beziehungen bei JPA und Hibernate (vorher JPA).

Verwandte Themen