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?
Utilisation @JoinColumn
au lieu de @Column
:
@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
En utilisant @JoinColumn
et @Column
_ ensemble entraînera la même erreur. Changez-le pour n'utiliser que: @JoinColumn
pour le réparer.
@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;