Saya memiliki entitas JPA dengan properti yang ditetapkan sebagai
@ManyToOne
@Column(name="LicenseeFK")
private Licensee licensee;
Tetapi ketika saya menerapkan pada JBoss 6, aplikasi menampilkan kesalahan yang mengatakan:
org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property
Saya menggunakan Hibernate 3.5 sebagai implementasi JPA 2.0.
Apa yang harus saya gunakan untuk mereferensikan kolom kunci asing?
Jawaban:
Gunakan
@JoinColumn
alih-alih@Column
:@ManyToOne @JoinColumn(name="LicenseeFK") private Licensee licensee;
sumber
@ManyToOne
ini, dan"mappedBy"
di sisi lain (kelas), yang berarti bahwa kolom ini (bernama"LicenseeFK"
) adalah kunci asing, dan oleh karena itu kolom yang digabungkan. Jadi, ini adalah joinColumn dengan nama"LicenseeFK"
. Saya harap sudah jelas sekarang.Menggunakan
@JoinColumn
dan@Column
bersama - sama akan menghasilkan kesalahan yang sama. Ubah menjadi hanya menggunakan:@JoinColumn
untuk memperbaikinya.sumber
@Column
JPA
@Column
penjelasan adalah untuk atribut entitas dasar, sepertiString
,Integer
,Date
.Jadi, jika nama atribut entitas berbeda dari nama kolom yang mendasarinya, Anda perlu menggunakan
@Column
anotasi untuk menentukan nama kolom secara eksplisit, seperti ini:@Column(name="created_on") private LocalDate createdOn;
@JoinColumn
The
@JoinColumn
penjelasan digunakan untuk menyesuaikan Key Foreign nama kolom , dan hanya dapat digunakan dengan asosiasi entitas.Jadi, dalam kasus Anda, karena Anda menggunakan
@ManyToOne
pengaitan, Anda perlu menggunakan@JoinColumn
:@ManyToOne(fetch=FetchTYpe.LAZY) @JoinColumn(name="LicenseeFK") private Licensee licensee;
sumber
Dalam kasus saya, jawaban @ VaishaliKulkarni sangat membantu untuk mengidentifikasi masalah.
Saya melewatkan untuk menulis bidang untuk anosi @Column dan itu berlaku di bidang berikutnya.
@Column(name = "account_id") // I forgot to write field here @ManyToOne @JoinColumn(name = "customer_id") private Customer customer;
Jadi, saya mendapatkan pengecualian di bidang "pelanggan".
sumber