@ Kolumny nie są dozwolone we właściwości @ManyToOne


136

Mam podmiot JPA z właściwością ustawioną jako

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

Ale kiedy wdrażam na JBoss 6, aplikacja wyświetla komunikat o błędzie:

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

Używam Hibernate 3.5 jako implementację JPA 2.0.

Czego należy użyć do odniesienia się do kolumny klucza obcego?


Może usunięcie adnotacji @ManyToOne rozwiąże Twój problem.
ℛɑƒæĿᴿᴹᴿ

Odpowiedzi:


287

Użyj @JoinColumnzamiast @Column:

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

13
Ale dlaczego? Jakieś wyjaśnienie?
Ondrej Tokar

4
@OndrejTokar może dlatego, że używasz @ManyToOnena tym i "mappedBy"po drugiej stronie (klasa), co oznacza, że ​​ta kolumna (nazwana "LicenseeFK") jest kluczem obcym, a więc połączoną kolumną. Jest to więc połączona kolumna o nazwie "LicenseeFK". Mam nadzieję, że teraz jest to jasne.
Aleksandar

7

Używanie @JoinColumni @Columnrazem spowoduje ten sam błąd. Zmień to na używanie: @JoinColumnaby to naprawić.


9
Twoja odpowiedź jest dość zagmatwana. Nie możesz użyć \ @Column z \ @ManyToOne punkt.
Abbadon

1

@Column

WZP @Columnadnotacja jest dla podstawowych atrybutów jednostki, jak String, Integer, Date.

Tak więc, jeśli nazwa atrybutu jednostki różni się od podstawowej nazwy kolumny, musisz użyć @Columnadnotacji, aby jawnie określić nazwę kolumny, na przykład:

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

@JoinColumn

@JoinColumnAdnotacji służy dostosować nazwę kolumny klucz obcy , a to może być używane tylko ze stowarzyszenia jednostki.

Tak więc w twoim przypadku, ponieważ używasz @ManyToOneskojarzenia, musisz użyć @JoinColumn:

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

Zauważ, że ustawiliśmy fetchatrybut na FetchType.LAZYponieważ domyślnie FetchType.EAGERjest używany, a to okropna strategia. Aby uzyskać więcej informacji o tym, dlaczego FetchType.LAZYjest to znacznie lepsze ustawienie domyślne, zapoznaj się z tym artykułem .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.