ChatGPT解决这个技术问题 Extra ChatGPT

@Column(s) not allowed on a @ManyToOne property

I have a JPA entity with a property set as

@ManyToOne
@Column(name="LicenseeFK")
private Licensee licensee;

But when I deploy on JBoss 6 the application throws an error saying:

org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property

I use Hibernate 3.5 as the JPA 2.0 implementation.

What should I use to reference the foreign key column?

Maybe removing the @ManyToOne annotation resolves your problem.

k
kraftan

Use @JoinColumn instead of @Column:

@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;

But why? Any explanation to that?
@OndrejTokar maybe because You use @ManyToOne on this, and "mappedBy" on the other side (class), which means that this column (named "LicenseeFK") is a foreign key, and therefore a joined column. So, it is a joinedColumn with name "LicenseeFK". I hope it is clear now.
Found this on 2021 :P. Thanks
@OndrejTokar what about go to docs? you have the annotations names...
E
EM-Creations

Using @JoinColumn and @Column together will result in the same error. Change it to only use: @JoinColumn to fix it.


Your answer is quite confusing. You cannot use \@Column with \@ManyToOne point.
V
Vlad Mihalcea

@Column

The JPA @Column annotation is for basic entity attributes, like String, Integer, Date.

So, if the entity attribute name differs from the underlying column name, then you need to use the @Column annotation to specify the column name explicitly, like this:

@Column(name="created_on")
private LocalDate createdOn;

@JoinColumn

The @JoinColumn annotation is used to customize a Foreign Key column name, and it can only be used with an entity association.

So, in your case, because you are using a @ManyToOne association, you need to use @JoinColumn:

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

Notice that we set the fetch attribute to FetchType.LAZY because, by default, FetchType.EAGER is used, and that's a terrible strategy.


S
Saibaba Gunturi

In my case @VaishaliKulkarni's answer was helpful to identify the problem.

I missed to write field for @Column annotion and it effected on next field.

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

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

So, I was getting exception at "customer" field.