假設我有一個「類」對象,它與「學生」具有一對多的關係。如何在一對多關聯中選擇一個冬眠兒童
public class Class implements java.io.Serializable {
private String classId;
private List<Student> student;
public Class() {
}
public Class(String classId) {
this.classId = classId;
}
@Id
@Column(name = "CLASS_ID", unique = true, nullable = false, length = 10)
public String getClassId() {
return this.classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy="classId")
public List<Student> getStudent() {
return student;
}
每班最多可以有20萬「學生」。我只想找到一個只有第一個學生的「班級」。但是當我這樣做的時候,我會得到一個單獨的「班級」,而不是隻有一個「學生」。
criteria = session.createCriteria(Class.class, "class").add(Restrictions.eq("class.classId", "0002")).setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
這將導致DB超時,因爲時間太長查詢數據庫擁有超過20萬的「學生」有沒有一種方法來查詢數據庫在Hibernate中檢索特定的「類」只有一個的很「學生」沒有檢索所有200k,所以DB不超時?我更喜歡用Criteria這樣做,但如果不是的話,有沒有辦法通過HQL來實現?
這並不清楚'想要檢索一個「類」只有它的第一個學生'。它被映射爲一個Set和Set不保持任何順序。第一個學生是什麼意思?學生表中是否有任何欄目維持秩序?關於解決方案,請將您的關聯設爲雙向關聯,並且您需要從'Student.class'而不是'Class.class'構建標準。一旦你得到學生,你可以導航到類實體。這應該有所幫助。 –
你說得對,我應該使用List not Set。但是,你能舉一個例子說明如何從Student.class中進行雙向關聯和構建標準? – user2719805
按照[此處](https://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html/ch07.html#collections-bidirectional)所述進行雙向製作後,添加「idx」字段作爲'OrderColumn'的學生,你可以使用'session1.createCriteria(MyStudent.class,「s」)。createAlias(「s.myClass」,「c」).add(Restrictions.eq(「c.id」,「 1))。add(Restrictions.eq(「s.idx」,1))。setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);'從Student.class構建條件,作爲示例。 –