网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
资料首页最新产品 技术参数 电路图 设计应用 解决方案 代理商查询 IC替换 IC厂商 电子辞典
关键字: 技术文章 PDF资料 IC价格 电路图 代理商查询 IC替换 IC厂商 电子辞典

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

    假设要通过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));

 

热门搜索:2839224 PDU2430 602-15 TLM825GF 2856032 B3429D BSV52R 2320351 UL800CB-15 2838283 PS2408 01C1001JF 2320296 UL603CB-6 2866666 BT05-F250H-03 TRAVELER3USB PDU12IEC 01M2251SFC3 BTS412B2E3062A 2811271 BT137S-600D118 BTS410F2E6327 01C5001JF SBB1002-1
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质