• hibernate的离线关联(多级)查询


    如果实体对象中没有关联对象的情况使用DetachedCriteria进行查询是一件很简单的事情。 

    假设要通过stuName查询一个学生Student记录,可以如下: 
    Java代码

    DetachedCriteria dc = DetachedCriteria.forClass(Student.class);   
    dc.add(Restrictions.like("stuName", stuName, MatchMode.ANYWHERE));  

    如果实体对象中含有OneToOne或者ManyToOne关联对象的情况可以参考下面方式,使用别名:
         
    如果要通过Student的Team的teamName查询一个Student记录,很多人都会这么写: 
    Java代码

        DetachedCriteria dc = DetachedCriteria.forClass(Student.class);   
        dc.add(Restrictions.like("team.teamName", teamName, MatchMode.ANYWHERE));  

    遗憾的是上述程序报错,说是在Student中找不到team.teamName属性,这是可以理解的。那么如何通过teamName查找Student呢? 
    可以这么写: 
    Java代码

        DetachedCriteria dc = DetachedCriteria.forClass(Student.class);   
        dc.createAlias("team", "t");   
        dc.add(Restrictions.like("t.teamName", teamName, MatchMode.ANYWHERE));  


    没错,就是要先建立team的引用,才能用team导航到teamName。 

    这里有一个特殊情况,如果是对引用对象的id查询,则可以不用建立引用,也就是可以不调用createAlias()语句,如下所示: 
    Java代码

    1. DetachedCriteria dc = DetachedCriteria.forClass(Student.class);   
    2. dc.add(Restrictions.like("team.id", teamId, MatchMode.ANYWHERE));  


    据 我个人的经验,team后只能跟其主键属性,比较其他属性要用别名。此主键属性可以用“id”字符来指代,也可以用team的主键属性来指代。换句话说, 我的Student类的类主键“stuId”,不管是在HQL还是在QBC中,都可以用stu.id来指代stu.stuId。在这里可以看出 “id”字符的特殊性。上述是个人观点,并未得到确实的证实。 

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

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

            DetachedCriteria dc = DetachedCriteria.forClass(Student.class);   
            dc.createAlias("team", "t");   
            dc.createAlias("t.school", "s");   
            dc.add(Restrictions.like("s.schoolName", schoolName, MatchMode.ANYWHERE)); 

    原文来自:http://hi.baidu.com/dongwujing2009/item/f7ae64197d79c113e3f986bf

  • 相关阅读:
    77777 77777(2) WriteUp 绕waf技巧学习
    简单sql注入学到的延时盲注新式攻击
    代码审计 => 74cms_v3.5.1.20141128 一系列漏洞
    mysql注入新姿势(数字与字符编码注入) hex,conv
    Netty 3升级Netty4实践
    微信小程序获取用户openid,头像昵称信息,后台java代码
    转:JSP 分页显示数据 (Oracle)
    从数据库提取数据通过jstl显示在jsp页面上
    转:微信生成二维码java
    转:微信开发获取地理位置实例(java,非常详细,附工程源码)
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/5952504.html
Copyright © 2020-2023  润新知