1.有個大大提高性能的建議:
比如得到list 是5個班級,然后要得到5個班級的所有學生
垃圾辦法:5次通過級聯獲得,等于執行5條sql語句
好辦法:
this
.getSession().createQuery(
???????? " from?User?a,Clazz?b?where?a.clazz=b?and?b?in(:clazz) " )
?.setParameterList( " clazz " ,?list)
?.list();
???????? " from?User?a,Clazz?b?where?a.clazz=b?and?b?in(:clazz) " )
?.setParameterList( " clazz " ,?list)
?.list();
僅執行一條
2.還有個很實用的方法,如何通過hql語句返回多個po
List?list?
=
?
this
.getSession().createQuery(
? " from?User?a,Clazz?b?where?a.clazz=b " ).list();
// 使用的時候:
Iterator?it? = ?list.iterator();
??
while (it.hasNext()){
?Object[]?vo? = ?(Object[])it.next();
?User?user? = ?(User)vo[ 0 ];
?Clazz?clazz? = ?(Clazz)vo[ 1 ];
?System.out.println(user.getUserName()? + ? " , " ? + ?clazz.getClassName());
}?
? " from?User?a,Clazz?b?where?a.clazz=b " ).list();
// 使用的時候:
Iterator?it? = ?list.iterator();
??
while (it.hasNext()){
?Object[]?vo? = ?(Object[])it.next();
?User?user? = ?(User)vo[ 0 ];
?Clazz?clazz? = ?(Clazz)vo[ 1 ];
?System.out.println(user.getUserName()? + ? " , " ? + ?clazz.getClassName());
}?
3.我們全部用一對一,多對一等。如果過濾有問題,有個辦法
List?students?
=
?
this
.getSession().createFilter(clazz.getStudents(),
"
where?this.status='A'
"
).list();?