0

我正在使用带有 Java 的 Hibernate 3。

我的 POJO 类如下:

教师.java

private long id;
private String teacherName;
private List<Student> students;
// getter-setter of all

学生.java

 private long id;
 private String studentName;

// getter-setter of both

教师.hbm.xml

<class name="Teacher" table="teacher_master">
    <id name="id" column="id" type="long">
        <generator class="native"></generator>
    </id>

    <property column="teacher_name" name="teacherName" type="string" />

    <list name="students" cascade="refresh">
        <key column="teacher_id"/>
        <index column="student_position" type="integer"/>
        <one-to-many class="Student"/>
    </list>
</class>

Student.hbm.xml包含idstudentName属性的映射。

我的数据库结构如下所示:

师父

id  | teacher_name
----|--------------
1   | teacher1
2   | teacher2

学生大师

id  | student_name  | teacher_id  | student_position
----|---------------|-------------|------------------
1   | student1      |      1      |      0
2   | student2      |      1      |      2
3   | student3      |      1      |      1

现在我想按照 student_position 的顺序获取所有 id = 1 的 Teacher 附加的 Student 。

我写了以下标准:

List<Long> ids = new ArrayList<Long>();
ids.add(1l);
ids.add(2l);
ids.add(3l);
Criteria criteria = session.createCriteria(Student.class);
criteria.add(Restrictions.in("id", ids));
List<Student> students = criteria.list();

这里同学们会按照主键1,2,3的顺序给我记录。

我希望这些记录按其student_position的顺序排列,即 1、3、2。

我怎样才能做到这一点?

4

2 回答 2

0
     Long techId=1l;
     Criteria criteria = getSession().createCriteria(Student.class, "student");
     criteria.add(Restrictions.eq("student.teacherId", techId));
     criteria.addOrder(Order.asc("student.studentPosition"));

如果模型对象中不存在该字段,则无法使用条件查询对象。您可以使用的另一种方法是休眠本机查询。

    Long techId=1l;
    Query query = session.createSQLQuery(
           "select * from student_master s where s.teacher_id = :teacherId order by s.student_position")
            .addEntity(Student.class)
            .setParameter("teacherId", "techId");
             List result = query.list();
于 2013-08-13T14:51:10.283 回答
-1

您可以添加排序标准 org.hibernate.criterion.Order

criteria.addOrder( Order.asc("yourPropertyName"));

您还可以添加多个这些排序。另请参阅15.3 下的此处

于 2013-08-13T14:34:58.160 回答