`
jefferson
  • 浏览: 275563 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于条件查询detachedCriteria--关联查询

阅读更多
文章转自http://www.blogjava.net/caixuetao/articles/60631.html假设要通过stuName查询一个学生Student记录,可以如下:  DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
    dc.add(Restrictions.like("stuName", stuName, MatchMode.ANYWHERE));
     
如果要通过Student的Team的teamName查询一个Student记录,很多人都会这么写:
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
    dc.add(Restrictions.like("team.teamName", teamName, MatchMode.ANYWHERE));
     
遗憾的是上述程序报错,说是在Student中找不到team.teamName属性,这是可以理解的。那么如何通过teamName查找Student呢?
可以这么写:
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
    dc.createAlias("team", "t");
    dc.add(Restrictions.like("t.teamName", teamName, MatchMode.ANYWHERE));
      没错,就是要先建立team的引用,才能用team导航到teamName。

这里有一个特殊情况,如果是对引用对象的id查询,则可以不用建立引用,也就是可以不调用createAlias()语句,如下所示:
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
    dc.add(Restrictions.like("team.id", teamId, MatchMode.ANYWHERE));
      据我个人的经验,team后只能跟其主键属性,比较其他属性要用别名。此主键属性可以用“id”字符来指代,也可以用team的主键属性来指代。换句话说,我的Student类的类主键“stuId”,不管是在HQL还是在QBC中,都可以用stu.id来指代stu.stuId。在这里可以看出“id”字符的特殊性。上述是个人观点,并未得到确实的证实。

分享到:
评论
3 楼 src_bord 2009-10-30  
呵呵  今天我碰到这问题了 谢谢拉
2 楼 madcow 2009-03-03  
照你这样子做了,然后提示错误:No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/myeclipse/myeclipse/eclipse/plugins/com.genuitec.org.hibernate.eclipse_5.1.1/myeclipse-data/3.0/lib/ehcache-1.1.jar!/ehcache-failsafe.xml
1 楼 anlongstar 2008-03-27  
good, thank you

相关推荐

Global site tag (gtag.js) - Google Analytics