2011-07-05 56 views
1

我有兩個類CourseStudentStudent類別使用firstNamelastName作爲組合鍵。我想在Course類中使用@OrderBy("firstName ASC"),但是有一個錯誤「找不到來自@OrderBy子句的屬性:Student.firstName」如何使用@OrderBy對Hibernate中的某個複合鍵進行排序

如何排序其中一個組合鍵(例如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:相應地更新了我的帖子。 –

相關問題