web-dev-qa-db-fra.com

@Colonnes non autorisées sur une propriété @ManyToOne

J'ai une entité JPA avec une propriété définie comme

@ManyToOne
@Column(name="LicenseeFK")
private Licensee licensee;

Mais lorsque je déploie sur JBoss 6, l'application génère une erreur en disant:

org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property

J'utilise Hibernate 3.5 comme implémentation de JPA 2.0.

Que dois-je utiliser pour référencer la colonne de clé étrangère?

129
newguy

Utilisation @JoinColumn au lieu de @Column:

@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
267
kraftan

En utilisant @JoinColumn et @Column _ ensemble entraînera la même erreur. Changez-le pour n'utiliser que: @JoinColumn pour le réparer.

5

@JoinColumn indique que ce champ est une clé étrangère. @Column indique que ce champ est une colonne normale de la table.

En SQL, nous pouvons joindre des tables uniquement sur les clés étrangères . Ainsi, @ManyToOne ou @ManyToMany ne sont applicables que sur les champs qui sont des clés étrangères. Pour indiquer que nous devons utiliser @JoinColumn.

Lorsque nous utilisons @Column, hibernate l'assume comme une colonne normale de la table et génère une erreur indiquant que
Comme une colonne donnée n'est pas une clé étrangère, vous n'êtes pas autorisé à l'utiliser pour rejoindre.

La solution est déjà donnée par kraftan

@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
1
Shivendra Kadam