2010-11-08 31 views
104

Tôi có một thực thể JPA với một tài sản thiết lập như@column (s) không được phép trên một tài sản @ManyToOne

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

Nhưng khi tôi triển khai trên JBoss 6 ứng dụng ném một lỗi nói:

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

Tôi sử dụng Hibernate 3.5 làm triển khai JPA 2.0.

Tôi nên sử dụng thông tin gì để tham chiếu cột khóa ngoại?

Trả lời

205

Sử dụng @JoinColumn thay vì @Column:

@ManyToOne 
@JoinColumn(name="LicenseeFK") 
private Licensee licensee; 
+9

Nhưng tại sao? Bất kỳ lời giải thích cho điều đó? –

+3

@OndrejTokar có thể là vì bạn sử dụng '@ ManyToOne' về điều này, và' "mappedBy" 'ở phía bên kia (lớp), có nghĩa là cột này (có tên' "LicenseeFK" ') là khóa ngoại, và do đó đã tham gia cột. Vì vậy, nó là một joinColumn với tên '" LicenseeFK "'. Tôi hy vọng nó là rõ ràng bây giờ. – Casper

4

Sử dụng @JoinColumn@Column với nhau sẽ dẫn đến những lỗi tương tự. Thay đổi chỉ để sử dụng: @JoinColumn để khắc phục.

+8

Câu trả lời của bạn khá khó hiểu. Bạn không thể sử dụng \ @Column với điểm \ @ManyToOne. – Abbadon

+0

@Abbadon Tôi đã chỉnh sửa câu trả lời để làm cho nó rõ ràng hơn. –

Các vấn đề liên quan