2009-11-14 5 views
3

Est-il possible de rendre unique une clé étrangère dans une table? Supposons que j'ai des entités A et B.Rendre les clés étrangères uniques dans JPA

A:

@Entity 
class A extends Serializable { 
@Id 
private long id; 

@OneToOne 
private B b; 
} 

B:

@Entity 
class B extends Serializable { 
@Id 
private long id; 
} 

Je veux faire en sorte qu'un A peut avoir un B, sauf qu'il ne peut y avoir d'autres A avec le même B. Ex: a1 a b1, et a2 a b2 ... dans ce cas, a3 ne peut pas avoir b1 ou b2 puisque les B doivent être uniques.

Existe-t-il un moyen d'accomplir ceci? J'aimerais pouvoir mettre l'annotation @Column (unique = true) au-dessus de @OneToOne, mais cela ne semble pas possible.

Répondre

0

Pour que vous pouvez ajouter:

@OneToOne
@JoinColumn (name = "COLUMN_NAME", unique = true)

+0

Pour une raison quelconque, lorsque je fais cela, aucun tableau "A" n'est créé. Je viens juste de générer la table B ... bizarre. – pushmatrix

5

@JoinColumn ne fonctionne pas.

Vous devez utiliser quelque chose comme ceci:

@Table(name="B", uniqueConstraints={ 
    @UniqueConstraint(columnNames={"b_id"}) 
}) 

où « b_id » est le nom de la contrainte de clé étrangère.