簡體   English   中英

在Hibernate中如何在多對多關聯中使用索引列?

[英]How to use index column in many-to-many association in criteria in Hibernate?

我正在Java中使用Hibernate 3。

我的POJO類別如下:

教師

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

Teacher.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屬性的映射。

我的數據庫結構如下所示:

Teacher_master

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

student_master

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

現在,我要按Student_position的順序獲取ID = 1的所有附加到Teacher的學生。

我寫了以下標准:

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的順序排列。

我該如何實現?

     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();

您可以添加排序條件org.hibernate.criterion.Order

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

您還可以添加多個以上訂購之一。 另請參閱此處的 15.3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM