@ManyToOne 속성에는 @Column이 허용되지 않습니다.


136

속성이 다음과 같이 설정된 JPA 엔터티가 있습니다.

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

그러나 JBoss 6에 배포하면 응용 프로그램에서 다음과 같은 오류가 발생합니다.

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

JPA 2.0 구현으로 Hibernate 3.5를 사용합니다.

외래 키 열을 참조하려면 무엇을 사용해야합니까?


@ManyToOne 주석을 제거하면 문제가 해결 될 수 있습니다.
ℛɑƒæĿᴿᴹᴿ

답변:


287

@JoinColumn대신에 사용하십시오 @Column:

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

13
그런데 왜? 그것에 대한 설명이 있습니까?
Ondrej Tokar

4
@OndrejTokar는 아마도 @ManyToOne이것과 "mappedBy"다른 쪽 (클래스)을 사용하기 때문에 아마도이 열 ( "LicenseeFK")은 외래 키이므로 조인 된 열입니다. 따라서 이름이 joinColumn입니다 "LicenseeFK". 나는 그것이 분명하기를 바랍니다.
Aleksandar

7

사용 @JoinColumn@Column함께하면 같은 오류가 발생합니다. 다음 @JoinColumn을 사용하도록 변경 하여 수정하십시오.


9
당신의 대답은 매우 혼란 스럽습니다. \ @ManyToOne 포인트와 함께 \ @Column을 사용할 수 없습니다.
Abbadon

1

@Column

JPA의 @Column주석이 기본 엔티티 속성입니다 같은 String, Integer, Date.

따라서 엔티티 속성 이름이 기본 열 이름과 다른 경우 @Column주석을 사용하여 다음 과 같이 열 이름을 명시 적으로 지정해야합니다.

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

@JoinColumn

@JoinColumn주석은 사용자 지정하는 데 사용됩니다 외래 키 열 이름을 , 그리고 그것은 단지 기업 협회와 함께 사용할 수 있습니다.

따라서 귀하의 경우 @ManyToOne연결을 사용하기 때문에 다음 을 사용해야합니다 @JoinColumn.

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

기본적 fetch으로이 속성이 설정되어 있으며 FetchType.LAZY이는 FetchType.EAGER끔찍한 전략입니다. FetchType.LAZY기본 설정이 왜 더 좋은지에 대한 자세한 내용은 이 기사를 확인 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.