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