@Column(s) sind für eine @ManyToOne-Eigenschaft nicht zulässig

Lesezeit: 2 Minuten

Benutzer-Avatar
neuer Typ

Ich habe eine JPA-Entität mit einer Eigenschaft, die als festgelegt ist

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

Aber wenn ich auf JBoss 6 bereitstelle, gibt die Anwendung einen Fehler aus, der besagt:

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

Ich verwende Hibernate 3.5 als JPA 2.0-Implementierung.

Was sollte ich verwenden, um auf die Fremdschlüsselspalte zu verweisen?

  • Vielleicht löst das Entfernen der Annotation @ManyToOne Ihr Problem.

    – ℛɑƒæĿᴿᴹᴿ

    11. Juli 2018 um 14:36 ​​Uhr

Verwenden @JoinColumn Anstatt von @Column:

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

  • Aber wieso? Irgendeine Erklärung dazu?

    – Ondrej Tokar

    13. Januar 2016 um 17:07 Uhr

  • @OndrejTokar vielleicht, weil Sie verwenden @ManyToOne dazu und "mappedBy" auf der anderen Seite (class), was bedeutet, dass diese Spalte (named "LicenseeFK") ist ein Fremdschlüssel und daher eine verbundene Spalte. Es ist also eine JoinedColumn mit Namen "LicenseeFK". Ich hoffe es ist jetzt klar.

    – Aleksandar

    19. Mai 2017 um 11:47 Uhr


  • 2021 gefunden :P. Vielen Dank

    – Hikaru-Shindo

    20. April 2021 um 16:55 Uhr

  • @OndrejTokar, was ist mit den Dokumenten? Sie haben die Anmerkungsnamen …

    – Luis Alfredo Serrano Diaz

    13. Februar um 13:25 Uhr

Benutzer-Avatar
Vaishali Kulkarni

Verwenden @JoinColumn und @Column zusammen ergibt den gleichen Fehler. Ändern Sie es so, dass es nur verwendet wird: @JoinColumn etwas reparieren.

  • Deine Antwort ist ziemlich verwirrend. Sie können \@Column nicht mit \@ManyToOne-Punkt verwenden.

    – Abbadon

    24. Januar 2015 um 9:06 Uhr

Benutzer-Avatar
Vlad Mihalcea

@Column

Die JPA @Column Annotation ist für grundlegende Entitätsattribute, wie z String, Integer, Date.

Wenn sich also der Name des Entitätsattributs vom Namen der zugrunde liegenden Spalte unterscheidet, müssen Sie die verwenden @Column Anmerkung, um den Spaltennamen explizit anzugeben, wie folgt:

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

@JoinColumn

Das @JoinColumn Anmerkung wird verwendet, um den Namen einer Fremdschlüsselspalte anzupassen, und kann nur mit einer Entitätszuordnung verwendet werden.

Also, in Ihrem Fall, weil Sie a verwenden @ManyToOne Verein, müssen Sie verwenden @JoinColumn:

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

Beachten Sie, dass wir die setzen fetch zuschreiben FetchType.LAZY weil standardmäßig FetchType.EAGER verwendet wird, und das ist eine schreckliche Strategie.

In meinem Fall war die Antwort von @VaishaliKulkarni hilfreich, um das Problem zu identifizieren.

Ich habe es versäumt, ein Feld für die @Column-Anmerkung zu schreiben, und es wirkte sich auf das nächste Feld aus.

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

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

Also bekam ich eine Ausnahme im Feld “Kunde”.

1343160cookie-check@Column(s) sind für eine @ManyToOne-Eigenschaft nicht zulässig

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy