1

Spring MVC 애플리케이션에서 내 데이터베이스에 연결을 시도하고 있습니다. 두 개의 테이블이 있습니다. 사용자 및 주문 사용자는 기본 키 열 "userID"를 가지며 주문에는 "userID"및 "orderID"열의 복합 키가 있습니다. 여기서 userID는 Users 테이블의 "userID"열을 참조하는 외래 키입니다. 여기 UserID 대신에 "user"컬럼에 매핑하려고하는 복합 키 내의 "UserID"에 대한 외래 키 참조가있는 Spring-data-JPA

내 클래스입니다 :

주문 :

@Entity 
@Table(name = "Orders") 
@IdClass(OrderPK.class) 
public class Order implements Serializable{ 

    private static final Long serialVersionUID = 1L; 

    @EmbeddedId 
    private OrderPK orderPK; 

    //other properties 

    //no args and full args constructor 

    //getters and setters 

    //toString 

} 

OrderPK :

@Embeddable 
public class OrderPK implements Serializable { 
    @Column(name = "orderID") 
    private Long orderID; 

    @ManyToOne 
    @JoinColumn(name = "userID") 
    private User user; 

    public OrderPK() { 
    } 

    public OrderPK(Long orderID, User user) { 
     this.orderID = orderID; 
     this.user = user; 
    } 

    public Long getOrderID() { 
     return orderID; 
    } 

    public void setOrderID(Long orderID) { 
     this.orderID = orderID; 
    } 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (!(o instanceof OrderPK)) return false; 
     OrderPK that = (OrderPK) o; 
     return Objects.equals(getOrderID(), that.getOrderID()) && 
      Objects.equals(getUser(), that.getUser()); 
    } 

    @Override 
    public int hashCode() { 
     return Objects.hash(getOrderID(), getUser()); 
    } 
} 

사용자 :

@Entity 
@Table(name = "USERS") 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @SequenceGenerator(name="USER_SEQUENCE", sequenceName="USER_SEQUENCE") 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, 
    generator="USER_SEQUENCE") 
    @Column(name = "userid") 
    private Long userId; 

    //other properties 

    //no args and full args constructor 

    //getters and setters 

    //toString 
} 

내가 얻을 데이터베이스에 연결을 시도합니다 다음 예외 : 초기화의 호출 :

org.springframework.beans.factory.BeanCreationException '의 EntityManagerFactory'클래스 패스 리소스에 정의 [조직/스프링 프레임 워크/부팅/자동 구성/ORM/JPA/HibernateJpaAutoConfiguration.class] 이름을 가진 bean을 생성 오류 메서드가 실패했습니다. @IdClass 주석 기업에 대한 속성 (주문 ID, 사용자를) 찾을 수 없습니다 : com.ex.evemarketback.domain.Order

...

에 의해 발생 : 조직 상자의 예외는 org.hibernate.AnnotationException입니다. hibernate.AnnotationException : com.ex.evemarketback.domain.Order

어떤 제안이 : @IdClass 주석 개체의 속성 (주문 ID, 사용자를) 찾을 수 없습니다? 당신이 @EmbeddedId를 사용하는 것처럼

답변

0

, 당신은 @IdClass 주석 필요가 없습니다

// @Embeddable - no need for that 
public class OrderPK implements Serializable { 
    private Long orderID; 
    private Long userId; 

    ... 
} 

기업 :

@Entity 
@Table(name = "Orders") 
@IdClass(OrderPK.class) 
public class Order implements Serializable{ 

    @Id 
    @Column(name = "orderID") 
    private Long orderID; 

    @Id 
    @Column(name = "userId", insertable=false, updatable=false) 
    private Long userId; 

    @ManyToOne 
    @JoinColumn(name = "userID") 
    private User user; 

@Entity 
@Table(name = "Orders") 
public class Order implements Serializable{ 

또는 당신은 @IdClass을 유지하려는 경우