関連テーブルを熱心にフェッチする必要がある1対多の関係があり、基準を使用して2つのテーブルをフィルタリングします。これが私のコードです..
public ArrayList<Student>getListOfStudents() {
Session session = getHibernateTemplate().getSessionFactory().openSession();
Criteria like = session.createCriteria(Student.class)
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
prepareForSelect(like);//some filtering
Criteria innerCriteria = like.createCriteria("phone","p",JoinType.LEFT_OUTER_JOIN);
prepareForSelect(innerCriteria);//same filtering but in phone now..
like.addOrder(Order.asc("c01"));
Iterator<java.util.Map<Object,Object>> ite = like.list().iterator();
HashSet<Student>students= new HashSet<Student>();
while(ite.hasNext())
{
java.util.Map<Object,Object> map = ite.next();
Student aStudent = (Student)map.get(Criteria.ROOT_ALIAS);
Phone phone = (Phone)map.get("p");
if(student.contains(aStudent))
students.addPhoneToStudent(phone); //add to phone hashSet in Student.class
else
{
student.setListOfPhones(new HashSet<Phone>(0));
students.addPhoneToStudent(phone);
students.add(student);
}
session.close();
return new ArrayList<Student>(students);
}
すべて問題ありませんが、学生が条件の制限を満たす電話を持っていない場合 (isValidPhone=true)、その学生は結果セットに含まれていません学生のための電話誰かがヒントを与えることができます. どうもありがとうございます