new*_*guy 131 java jboss annotations hibernate jpa
我有一个JPA实体,其属性设置为
@ManyToOne
@Column(name="LicenseeFK")
private Licensee licensee;
Run Code Online (Sandbox Code Playgroud)
但是当我在JBoss 6上部署时,应用程序会抛出一个错误:
org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property
Run Code Online (Sandbox Code Playgroud)
我使用Hibernate 3.5作为JPA 2.0实现.
我应该用什么来引用外键列?
kra*_*tan 274
使用@JoinColumn
而不是@Column
:
@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
Run Code Online (Sandbox Code Playgroud)
Vla*_*cea 10
@Column
JPA@Column
注释用于基本实体属性,例如String
, Integer
, Date
。
因此,如果实体属性名称与基础列名称不同,则需要使用注释@Column
显式指定列名称,如下所示:
@Column(name="created_on")
private LocalDate createdOn;
Run Code Online (Sandbox Code Playgroud)
@JoinColumn
该@JoinColumn
注释用于自定义外键列名称,并且只能与实体关联一起使用。
因此,在您的情况下,因为您正在使用@ManyToOne
关联,所以您需要使用@JoinColumn
:
@ManyToOne(fetch=FetchTYpe.LAZY)
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
Run Code Online (Sandbox Code Playgroud)
请注意,我们将fetch
属性设置为FetchType.LAZY
因为默认情况下FetchType.EAGER
使用,这是一个糟糕的策略。
小智 5
使用@JoinColumn
和@Column
一起将导致相同的错误.将其更改为仅用于:@JoinColumn
修复它.
归档时间: |
|
查看次数: |
62464 次 |
最近记录: |