2011-07-05 6 views
1

私は2つのクラスCourseStudentを持っています。 Studentクラスは、複合キーとしてfirstNamelastNameを使用します。 をCourseクラスに使用しますが、エラー"@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がcompositeキーを1つのフィールドinternalとして実装していて、firstNameがStudentにとって有効なフィールドではないようです。これが真実なら、firstNameで注文する方法はありますか? – hebingliu

+0

デフォルトはプライマリキー{firstName、lastName}による注文ですが、firstNameで注文するだけです。 – hebingliu

+0

@heingliu:私の投稿を更新しました。 –

関連する問題