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
@ColumnJPA@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 次 |
| 最近记录: |