关于条件查询detachedCriteria的一点体会

假设要通过stuName查询一个学生Student记录,可以如下:
420){this.resized=true;this.style.width=420;}" align=top>  DetachedCriteria dc  =  DetachedCriteria.forClass(Student. class );
    dc.add(Restrictions.like("stuName", stuName, MatchMode.ANYWHERE));
      

 如果要通过Student的Team的teamName查询一个Student记录,很多人都会这么写:
420){this.resized=true;this.style.width=420;}" align=top>  DetachedCriteria dc  =  DetachedCriteria.forClass(Student. class );
    dc.add(Restrictions.like("team.teamName", teamName, MatchMode.ANYWHERE));
      

遗憾的是上述程序报错,说是在Student中找不到team.teamName属性,这是可以理解的。那么如何通过teamName查找Student呢?
可以这么写:
420){this.resized=true;this.style.width=420;}" align=top>  DetachedCriteria dc  =  DetachedCriteria.forClass(Student. class );
    dc.createAlias("team", "t");
    dc.add(Restrictions.like("t.teamName", teamName, MatchMode.ANYWHERE));
      
没错,就是要先建立team的引用,才能用team导航到teamName。

这里有一个特殊情况,如果是对引用对象的id查询,则可以不用建立引用,也就是可以不调用createAlias()语句,如下所示:
420){this.resized=true;this.style.width=420;}" align=top>  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”字符的特殊性。上述是个人观点,并未得到确实的证实。
 
来源:http://www.blogjava.net/caixuetao/articles/60631.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值