网站首页
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));

 

热门搜索:PDUMV20 SBB2805-1 PS2408 2804623 2838319 BT151S-800R118 PS-410-HGOEMCC RBC11A LS606M TLM626SA PS361220 1553DBPCB TLM825GF B30-7100-PCB 2839240 TLP810NET 2920120 01M2251SFC3 TLM615SA 2839648 01B1002JF ADS1013IDGSR 6SPDX UL24RA-15 SBB2808-1
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质