Answers:
使用@JoinColumn
代替@Column
:
@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
@ManyToOne
在此以及"mappedBy"
另一侧(类)上使用,这意味着此列(名为"LicenseeFK"
)是外键,因此是联接列。因此,它是一个具有name的joinColumn "LicenseeFK"
。我希望现在已经清楚了。
一起使用@JoinColumn
和@Column
将导致相同的错误。将其更改为仅用于:@JoinColumn
进行修复。
@Column
JPA的@Column
注解是实体基本属性,如String
,Integer
,Date
。
因此,如果实体属性名称与基础列名称不同,则需要使用@Column
批注明确地指定列名称,如下所示:
@Column(name="created_on")
private LocalDate createdOn;
@JoinColumn
该@JoinColumn
注释用于定制外键列名,并且它只能与实体结合使用。
因此,在您的情况下,因为您使用的是@ManyToOne
关联,所以需要使用@JoinColumn
:
@ManyToOne(fetch=FetchTYpe.LAZY)
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
请注意,我们将
fetch
属性设置为,FetchType.LAZY
因为默认情况下FetchType.EAGER
使用该属性,这是一个糟糕的策略。有关为什么FetchType.LAZY
默认更好的详细信息,请参阅本文。