在Hibernate中不为子对象工作

时间:2013-07-17 17:17:02

标签: java hibernate sql-order-by

我想检索在某个特定列上排序的子对象 我有父班学生

public class Student {

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="STUDENT_ID")
    private long studentId; 

    @Column(name="STUDENT_NAME")
    private String studentName;

    @OneToMany(mappedBy="student")
    private List<Phone> studentPhoneNumbers ; 
}

和儿童类电话

public class Phone {

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="PHONE_ID")
    private long phoneId; 

    @Column(name="PHONE_NO")
    private String phoneNumber;

    @Column(name ="UPDATE_TMSTP")
    private Date updateTmstp;

    @ManyToOne
    @JoinColumn(name = "STUDENT_ID")
    private Student student;
}

我正在获取学生对象,而这反过来又给了我手机号码列表。我想要根据列updateTmstp对这些电话号进行排序,为此我写了这个

Student stu = (Student)session.createCriteria(Student.class)
                .createAlias("studentPhoneNumbers", "st").addOrder(Order.desc("st.updateTmstp")).uniqueResult();

但它不起作用。有人能帮我吗。我做错了什么?

1 个答案:

答案 0 :(得分:0)

studentPhoneNumbers地点orderBy注释下和查询中,使用加入提取来热切关注所有手机。

请注意,这意味着studentPhoneNumbers上的所有fecth将始终生成SELECT ... ORDER BY。如果这不是您想要的,我建议您在获得结果后在代码中对集合进行排序。