网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 技术资讯 > 正文
  • RSS
  • 关于条件查询 DetachedCriteria 的一点体会
    http://www.ic72.com 发布时间:2010/9/20 10:21:47

        假设要通过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”字符的特殊性。上述是个人观点,并未得到确实的证实。

        补充:

        如果是三级或更多级查询怎么办?

        以三级查询为例,仍引用上面的例子:

        DetachedCriteria dc = DetachedCriteria.forClass(Student.class);

        dc.createAlias("team", "t");

        dc.createAlias("t.school", "s");

        dc.add(Restrictions.like("s.schoolName", schoolName, MatchMode.ANYWHERE));

     


    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质