Ho due entità di database: Forum
e Topic
.JPA: annotazione chiave esterna
Topic
ha il membro di dati protected long forumId
, che indica ovviamente il forum di Topic
.
La mia domanda è quale annotazione utilizzare per questo membro dati?
Ho due entità di database: Forum
e Topic
.JPA: annotazione chiave esterna
Topic
ha il membro di dati protected long forumId
, che indica ovviamente il forum di Topic
.
La mia domanda è quale annotazione utilizzare per questo membro dati?
Come Forum ha molti argomenti, e un argomento appartiene ad uno e solo Forum, probabilmente si vuole andare con un attributo di tipo Forum annotato con @ManyToOne
:
@ManyToOne
@JoinColumn(name = "forumId")
private Forum forum;
guarda anche:
ma il "problema" in questo caso è che quando serializzi l'Argomento su XML o JSON (per passarlo ad un client, ad esempio), l'intero oggetto Forum verrà serializzato di default ... stessa cosa se si carica un argomento sul server, è necessario passare l'intero argomento Argomento + Forum, non è possibile utilizzare solo l'id del forum. In alcuni casi, sembra più semplice inserire manualmente la chiave esterna dell'entità correlata. – splinter123
@ManyToOne Come l'annotazione implica - si hanno molti argomenti per forum
Come altri hanno risposto -
È necessario utilizzare le annotazioni ManyToOne e JoinColumn.
Bare in mente, dal momento che JPA riguarda ORM - Mappatura relazionale dell'oggetto,
Si dovrebbe fare riferimento a un altro oggetto come avresti fatto "naturalmente" in Java - cioè tramite un oggetto e non tramite il suo identificatore (che è forumId) in il tuo caso),
Questa era una delle considerazioni progettuali tra le relazioni a JPA e Hibernate (in precedenza a JPA).
Non è necessario dichiarare 'forumId' in' Argomento'. –
perché dici così? Penso che sia necessario perché devo sapere quale forum l'argomento appartiene a – socksocket
@socksocket Penso che sia perché è possibile annotare un attributo 'Forum', specificando l'id con l'annotazione' @ JoinColumn', vedere la mia risposta. ;) – elias