2011-07-05 2 views
1

두 개의 클래스 CourseStudent이 있습니다. Student 클래스는 firstNamelastName을 복합 키로 사용합니다. 을 Course 클래스에 사용하고 싶지만 오류가 있습니다. "@OrderBy 절의 속성이 없습니다 : Student.firstName"입니다.@OrderBy를 사용하여 최대 절전 모드에서 복합 키 중 하나를 정렬하는 방법

합성 키 (예 : firstName) 중 하나를 정렬하려면 어떻게해야합니까?

public class Course{ 
    @OneToMany(mappedBy="course") 
    @OrderBy("firstName ASC") 
    // Error: property from @OrderBy clause not found: Student.firstName, why? 
    private List<Student> students; 
..... 
} 


public class Student{ 
    @Id 
    @Column(name="first_name") 
    private String firtName; 
    @Id 
    @Column(name="last_name") 
    private String lastName; 

    @ManyToOne 
    @JoinColumn(name="course_id") 
    private Course course; 
..... 
} 

답변

1

당신은 firtName,에 맞춤법이 틀린 - s가없는 알 수 있습니다. 문제를 해결하고 가능성이 높습니다.

[편집] 여전히 작동하지 않는 경우

. 대신 @EmbeddedId으로 교체하십시오.

public class Student implements Serializable{ 
    @EmbeddedId 
    private StudentPK name; 

    @ManyToOne 
    @JoinColumn(name="course_id") 
    private Course course; 
    ..... 

    @Embeddable 
    public static class StudentPK implements Serializable { 
     @Column(name="first_name") 
     private String firtName; 

     @Column(name="last_name") 
     private String lastName; 

     .... 
    } 
} 

, 아래처럼 그런 다음이 오자로 인한 아니에요

public class Course{ 
    @OneToMany(mappedBy="course") 
    @OrderBy("name.firstName ASC") 
    private List students; 
    ..... 
} 
+0

은, 내가 그것을 수정, 사용하여 작동해야하지만 여전히 오류가 발생합니다. hibernate가 복합 키를 하나의 필드 내부로 구현했으며 firstName은 Student의 유효한 필드가 아닙니다. 이것이 사실이라면 firstName으로 주문할 수있는 방법이 있습니까? – hebingliu

+0

기본 키는 {firstName, lastName} 기본 키순으로 정렬되지만 firstName 만 주문하면됩니다. – hebingliu

+0

@hebingliu : 내 게시물을 업데이트했습니다. –

관련 문제