2014-02-11 3 views
0

복합 키를 사용하여 엔티티가 매핑 된 레거시 데이터베이스가 있습니다. Eclipse JPA Tools를 사용하여 테이블을 엔티티로 변환했지만 수신 된 엔티티가 작동하지 않습니다. 톰캣 시작하는 동안 나는 예외를 나타납니다 referencedColumnNames(PETROL_STATION_ID, PROVIDER_ID) of xxx.FuelCardEntity.petrolStationInfo referencing xxx.PetrolStationInfoEntity not mapped to a single property복합 키가있는 ManyToOne 관계

복합 키 클래스 :

@Embeddable 
public class PetrolStationInfoEntityPK implements Serializable { 
private static final long serialVersionUID = 1L; 

@Column(name="PETROL_STATION_ID", insertable=false, updatable=false) 
private long petrolStationId; 

@Column(name="PROVIDER_ID", insertable=false, updatable=false) 
private long providerId; 

@Column(name = "\"VERSION\"") 
private long version; 

// hashCode and equals method 
} 

PetrolStationInfoEntity 클래스 :

@Entity 
@Table(name="PETROL_STATION_INFO") 
@NamedQuery(name="PetrolStationInfoEntity.findAll", query="SELECT p FROM PetrolStationInfoEntity p") 
public class PetrolStationInfoEntity implements Serializable { 
private static final long serialVersionUID = 1L; 

@EmbeddedId 
private PetrolStationInfoEntityPK id; 
} 

의 관계를 들고 FuelCardEntity 클래스 :

public class FuelCardEntity implements Serializable { 
private static final long serialVersionUID = 1L; 

@EmbeddedId 
private FuelCardEntityPK id; 

// bi-directional many-to-one association to PetrolStationInfoEntity 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumns({ 
     @JoinColumn(name = "INFO_PETROL_STATION_ID", referencedColumnName = "PETROL_STATION_ID", nullable = false, insertable = false, updatable = false), 
     @JoinColumn(name = "INFO_PROVIDER_ID", referencedColumnName = "PROVIDER_ID", nullable = false, insertable = false, updatable = false) }) 
private PetrolStationInfoEntity petrolStationInfo; 

내가 찾은 조언 만 dy는 @JoinColumns을 사용했으나 알 수 있듯이 이미 있습니다. 여전히 작동하지 않습니다. 어떤 생각을 데이터베이스 스키마를 변경하지 않고 문제를 해결하는 방법? 응용 프로그램은 Spring 3 + Hibernate 4로 작성되었습니다.

미리 감사드립니다!

답변

1

당신의 문제는 열쇠입니다! 키 obejct에 3 가지 속성이 있습니다. JPA는 고유 한 식별을 위해 3 개의 모든 열이 필요하다고 가정합니다. 따라서 첫 번째 2 열만있는 @JoinColumns를 사용하려고하면 오류가 발생하므로 3을 기대합니다. 세 번째 열 VERSION을 @JoinColumns에 추가하면 작동합니다.

+0

예, 게시물을 작성한 직후이 열의 누락 된 항목이 발견되어 도움이되었습니다. :) 재미있는 부분은 엔터티가 JPA 도구로 생성 되었기 때문에 왜 세 번째 열이 누락되었는지 잘 모르겠습니다. 필자가 생각한 바로는'@Column (name = "\ VERSION \" ")을 사용하여'PetrolStationInfoEntityPK'를 만들었습니다. 두 번째 큰 따옴표가 생략 된 이유 인 것 같습니다. – Nav