Java @@ManyToOne属性上不允许有列
我有一个属性集为的JPA实体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
@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注释可以解决您的问题。