Java @@ManyToOne属性上不允许有列

Java @@ManyToOne属性上不允许有列,java,hibernate,jpa,jboss,annotations,Java,Hibernate,Jpa,Jboss,Annotations,我有一个属性集为的JPA实体 @ManyToOne @Column(name="LicenseeFK") private Licensee licensee; 但当我在JBoss 6上部署时,应用程序会抛出一个错误,说明: org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property 我使用Hibernate3.5作为JPA2.0实现 我应该使用什么来引用外键列?使用@JoinColumn

我有一个属性集为的JPA实体

@ManyToOne
@Column(name="LicenseeFK")
private Licensee licensee;
但当我在JBoss 6上部署时,应用程序会抛出一个错误,说明:

org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property
我使用Hibernate3.5作为JPA2.0实现


我应该使用什么来引用外键列?

使用
@JoinColumn
而不是
@column

@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
@ManyToOne(fetch=FetchTYpe.LAZY)
@JoinColumn(name="LicenseeFK")
private Licensee licensee;

同时使用
@JoinColumn
@Column
将导致相同的错误。 将其更改为仅使用:
@JoinColumn
来修复它。

@Column
JPA
@列
注释用于基本实体属性,如
字符串
整数
日期

因此,如果实体属性名称与基础列名不同,则需要使用
@column
注释明确指定列名,如下所示:

@Column(name="created_on")
private LocalDate createdOn;
@JoinColumn
@JoinColumn
注释用于自定义外键列名,并且只能与实体关联一起使用

因此,在您的情况下,因为您使用的是
@manytone
关联,所以需要使用
@JoinColumn

@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;
@ManyToOne(fetch=FetchTYpe.LAZY)
@JoinColumn(name="LicenseeFK")
private Licensee licensee;

请注意,我们将
fetch
属性设置为
FetchType.LAZY
,因为默认情况下使用的是LAZY,这是一种糟糕的策略。

在我的例子中@VaishaliKulkarni的答案有助于识别问题

我错过了为@Column注释编写字段,它影响了下一个字段

@Column(name = "account_id")
// I forgot to write field here

@ManyToOne
@JoinColumn(name = "customer_id")
private Customer customer;

所以,我在“客户”字段遇到了一个例外。

您的答案很混乱。您不能将\@列与\@多个点一起使用。但为什么?对此有何解释?@OndrejTokar可能是因为您在这方面使用了
@ManyToOne
,而在另一侧(类)使用了
“mappedBy”
,这意味着此列(名为
“LicenseeFK”
)是一个外键,因此是一个联接列。因此,它是一个名为“LicenseeFK”的联合列。我希望现在一切都清楚了。在2021年第页发现了这个。谢谢。删除@ManyToOne注释可以解决您的问题。