[英]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包含id和studentName屬性的映射。
我的數據庫結構如下所示:
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.