2011-03-30 3 views
0

Je souhaite créer un mappage @ManyToOne entre Acount et Record. Un compte peut avoir beaucoup d'enregistrements. Mais je ne veux pas ajouter le champ Compte dans la classe Record ou vice versa. Pourriez-vous s'il vous plaît m'aider à décrire cela dans les annotations?Hibernate. Mappage de clé étrangère par ID

@Entity 
public class Account { 

    @Id 
    ... getId(); 
} 

@Entity 
public class Record { 

    @Id 
    ... getId(); 

    @????? 
    ... getAccountId(); 

} 
+0

Si vous ne voulez pas ajouter un compte réel ou d'un champ Record, alors quel est le point de la cartographie? Si tout ce que vous voulez récupérer est un identifiant, alors vous n'avez pas besoin d'un mappage. Mettez simplement 'accountId' ou' recordId' dans une colonne régulière. –

+0

Qu'en est-il des clés étrangères? –

+0

Pourriez-vous clarifier cela? Le 'accountId' ou' recordId' _is_ la clé étrangère. –

Répondre

2

entités de cartographie aux tables est le moyen Hibernate fonctionne généralement, si vous ne voulez pas la classe de compte dans l'enregistrement Vous pouvez simplement définir accountId aussi longtemps (ou int, selon le ok) et non annotiez à moins que vous besoin d'un nom de colonne différent. Mais je suggère de ne pas le faire.

+0

Dans ce cas, Hibernate ne créera pas de clé étrangère automatiquement. C'est un problème. –

+3

Je suppose qu'il n'y a aucun moyen de le faire comme vous voulez alors; dans Hibernate pour définir une clé étrangère, vous avez besoin d'une entité cible –

0

Si vous ne souhaitez pas ajouter les contraintes de clé étrangère à l'une ou l'autre table, vous pouvez créer une table distincte avec les contraintes qui vous permettent d'établir la relation.

accountId | recordId 
-------------------- 
1  | 2 
1  | 3 
2  | 4 

avec JPA ...

@ManyToOne 
@JoinColumn(table=TABLE_NAME_ABOVE,name="accountId") 
public Account getAccount(){ ... } 
+0

Je veux cette clé étrangère. Relations via une table séparée ... On dirait un mauvais design. –

Questions connexes