2012-02-09 3 views
2

OneToOne 단방향 관계를 선언하는 방법을 알 수 없습니다. TripDeparture 모델에는 여행 모델의 외래 키가 있습니다 (이것이 DB 설정 방법입니다). departureLocation이 null로 설정된 출장을 추가하려고 할 때 아래 오류가 표시됩니다. 내가 'departureLocation'선언을 꺼내면 모든 것이 잘 작동합니다.JPA2.0에서 @OneToOne 단방향 매핑 - SQL 오류가 계속 발생 함

11891 [btpool0-2] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1054, SQLState: 42S22 
11891 [btpool0-2] ERROR org.hibernate.util.JDBCExceptionReporter - Unknown column 'tripId' in 'field list' 

나는 아이디어가 부족합니다 ... 아무도 도와 줄 수 있습니까 ??

감사합니다.

학부모 :

@Entity 
@Table(name = "TRIP") 
public class Trip implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE) 
    @JoinColumn(name = "tripId") 
    private TripDeparture departureLocation; 

아이 :

여기
@Entity 
@Table(name = "DEPARTURE_LOCATION") 
public class TripDeparture implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    private int tripId; 
+0

귀하의 설정이 조금 이상하다. 자바 관점에서 보면, 부모는 자식을 알고 있지만 다른 방향은 아니다 ('tripId' 필드 제외). 그러나 데이터베이스 수준에서, 아동 (출발)은 협회를 관리하는 것으로 보인다. 그게 의도 된거야? – Thomas

+0

예, 의도입니다 (마샬링/언 마샬링의 이유로, 다른 대화입니다). – Vladimir

+0

또한 이것은 새로운 여행을 지속하는 방식으로 나를 제한합니다 (departureLocation을 null로 저장 한 다음 저장된 여행에서 tripID로 TripDeparture를 유지해야 함). 그러나 그렇게하는 것이 좋습니다. 여기에는 양방향 관계가 있습니다. – Vladimir

답변

3

내가 그것을 해결하는 방법입니다. @JoinColumn을 사용하는 대신 @PrimaryKeyJoinColumn을 사용했습니다. DEPARTURE_LOCATION에서 'id'변수 (및 열)도 삭제했지만 중요하지 않아야합니다.

부모 :

@Entity 
@Table(name = "TRIP") 
public class Trip implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE) 
    @PrimaryKeyJoinColumn 
    private TripDeparture departureLocation; 

아이 :

@Entity 
@Table(name = "DEPARTURE_LOCATION") 
public class TripDeparture implements Serializable { 

    @Id 
    private int tripId; 
관련 문제