zoukankan      html  css  js  c++  java
  • Hibernate【关系映射-左内右连接】

    一。一对多  之  内连接

     使用内连接

    List list=session.createQuery(" from domain.Classes c inner join c.students").list();

      classes中3条数据 。student中6条数据

      发出了4条sql语句

      list结构是6个Object[]类型数据

    迫切内连接:

    List list=session.createQuery(" from domain.Classes c inner join fetch c.students").list();

      发出了1条sql语句

      list结构是Classes类型

    左外连接

    List list=session.createQuery(" from domain.Classes c left join c.students").list();

      发出了4条sql语句

      list结构是6个Object[]类型数据

    迫切左外连接

    List list=session.createQuery(" from domain.Classes c left join fetch c.students").list();

      发出了1条sql语句

      list结构是Classes类型

    要查询两张表的字段怎么办

      (1)创建一个domain类,要有个构造函数

        (2) 使用

    List list=session.createQuery("select new domain.ClassesView(c.name,s.name) from domain.Classes c inner join fetch c.students s ").list();

       发现报错了,带构造函数的查询和fetch的查询不能同时存在


     

    二。多对多 之 内连接

    迫切内连接

    session.createQuery("from domain.Classes c inner join fetch c.students s ");

    迫切左外连接

    session.createQuery("from domain.Classes c left join fetch c.students s ");

    三。一对多 + 多对多

    (1)看下映射文件

        <class name="domain.Student" table="STUDENT">
            <cache usage="read-only"/>
            <id name="id" type="java.lang.Integer">
                <column name="ID" />
                <generator class="increment" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="NAME" />
            </property>
            <set name="course" cascade="save-update" table="STUDENT_COURSE">
                <key column="studentID"></key>
                <many-to-many class="domain.Course" column="courseID"/>
            </set>
            <many-to-one name="classes" class="domain.Classes" column="classesID" cascade="save-update"></many-to-one>
        </class>

    (2) 使用

            List list=session.createQuery("from domain.Classes c inner join c.students s inner join s.course ").list();

      

  • 相关阅读:
    Win7操作系统防火墙无法关闭的问题 无法找到防火墙关闭的地方的解决的方法
    【微信】微信获取TOKEN,以及储存TOKEN方法,Spring quartz让Token永只是期
    OC内存管理总结,清晰明了!
    下次自己主动登录(记住password)功能
    linux删除svn版本号库
    Python中可避免读写乱码的一个强慷慨法
    Tomcat源代码阅读#1:classloader初始化
    iOS关于图片点到像素转换之杂谈
    hdu 3804树链剖分+离线操作
    cdn缓存
  • 原文地址:https://www.cnblogs.com/xingdongpai/p/5138147.html
Copyright © 2011-2022 走看看