`
yangzhibin_java
  • 浏览: 51055 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

hibernate 产生sql机制

阅读更多

一,基础知识

lazy是指什么时候抓取(fetch)

fetch是指通过什么方式抓取

 

lazy取值:proxy(缺省),no-proxy,false(hibernate3.0前只有false和true两个值)

fetch取值:select(缺省),join

 

fetch为join时lazy失效(原因:因为进行了联表查询,所有lazy就没用了)

 

将关系在many一端维护的原因:

         1,在one的一端维护关系,他会发多余的update

                不发update的方法: <set/> 可以使用inverse="true" 来时many一端不维护关系

                        但是只是不发update,所有还是有问题,次表的关系字段为null

         2,在one的一端维护关系,如果次表中的那个关联的字段设置为非空 ,插入次对象时就会报错

 

二,many-to-one 与 one-to-many

         次对象 many-to-one :(1,不自动级联 2,支持 懒加载

                 <many-to-one name="classes "/>

 

         主对象 one-to-many :(1,不自动级联(最好用many一端维护关系) 2,支持懒 加载 )

                   <set name="students ">
                          <key column="classesid " not-null="true "/>
                          <one-to-many class="Student "/>
                   </set>
     

 

三,one-to-one(默认情况下<one-to-one>是将自己的主键个关联表的主键对应)

   1,主键关联

         次对象 :(1,自动级联 2,支持 懒加载

                 <id name="id">
                        <generator class="foreign">
                                    <param name="property">idCard</param>
                        </generator>
                 </id>

 

                 <one-to-one name="xxxx" constrained ="true"/>  

 

         主对象 :(1,不支持懒 加载 fetch="join(默认)

                 <one-to-one name="xxxx"> 查询关联对象时,联表 sql语句

 

    2,唯一外键关联

         次对象 :(1,不自动级联 2, 支持 懒加载

                 <many-to-one  name="xxxx" unique ="true"/>

 

         主对象 :(1,不支持懒加fetch="join(默认)

                 <one-to-one  name="xxxx" property-ref ="xxxx"/>

 

四,many-to-many

         <set name="roles" table ="t_user_role">
            <key column ="userid"/>       -----自己的字段
            <many-to-many class="Role" column ="roleid"/>  -----他人的字段
        </set>

 

        <set name="roles" table ="t_user_role" order-by ="userid">  --安装什么属性排序
            <key column ="roleid"/>       -----自己的字段
            <many-to-many class="User" column ="userid"/>  -----他人的字段
        </set>

 

 

 

五,session.save(obj)时,主键生成策略不同,发sql语句的时机也不同

    native :save(obj)后就发sql语句(因为native是数据库提供主键生成,如果不发布知道主键的值)

    uuid :save(obj)后是不会发sql语句(因为uuid是随机的一个主键,所有不发sql也知道主键的值)

 

六,flush

     工作:1,清理缓存;2,执行sql

     什么时候执行:1,commit;2,调用flush();3,执行查询前(如,iterator)

 

七,lazy

      可以使用的范围:

         1,<class>标签上                                                     取值:true /false

                     只对普通属性起作用

         2,<property>标签上(需要类增强工具 )                      取值:true/false

         3,<set><list>标签上                                               取值:true /false/extra

                      extra:比较智能的发sql语句

         4,<one-to-one><many-to-one>单端关联上            取值:false/proxy /noproxy (需要类增强工具 )

 

分享到:
评论

相关推荐

    jdbc基础和参考

    (自动脏检查机制) Detached(托管状态): 1.和Session失去关联 2.数据库中有对应记录存在 3.对托管对象的更动,在托管期间不会影响数据库,但是将托管状态重新和数据库进行关联的时候会将托管对象重新变为持久态,...

    Java常见面试题208道.docx

    115.hibernate 中如何在控制台查看打印的 sql 语句? 116.hibernate 有几种查询方式? 117.hibernate 实体类可以被定义为 final 吗? 118.在 hibernate 中使用 Integer 和 int 做映射有什么区别? 119.hibernate 是...

    火炬博客系统7

    &lt;br&gt; MYSQL安装 将安装包解压缩,运行tdbmysql.bat,然后用torchblogdb-setup.sql建表, 将数据导入 MYSQL数据库。 将torchblog目录COPY至Tomcat/webapps/下,即Tomcat/webapps/torchblog 修改Tomcat...

    火炬博客系统6

    &lt;br&gt; MYSQL安装 将安装包解压缩,运行tdbmysql.bat,然后用torchblogdb-setup.sql建表, 将数据导入 MYSQL数据库。 将torchblog目录COPY至Tomcat/webapps/下,即Tomcat/webapps/torchblog 修改Tomcat...

    火炬博客系统5

    &lt;br&gt; MYSQL安装 将安装包解压缩,运行tdbmysql.bat,然后用torchblogdb-setup.sql建表, 将数据导入 MYSQL数据库。 将torchblog目录COPY至Tomcat/webapps/下,即Tomcat/webapps/torchblog 修改Tomcat...

    J2EE应用开发详解

    37 3.5 动态代理 39 3.6 反射机制在Hibernate中的应用 42 3.7 小结 46 第4章 Servlet技术 47 4.1 Servlet简介 47 4.1.1 Servlet的特点 47 4.1.2 Servlet的优势 48 4.1.3 Servlet的工作过程 49 4.1.4 Servlet的生命...

    java面试题

    Struts2以核心控制器FilterDispatcher为基础,包含了框架内部的控制流程和处理机制。 Hibernate工作原理,Hibernate数据持久化? 答:Hibernate工作原理: 1:读取并解析映射信息,创建SessionFactory 2:打开...

    Spring.3.x企业应用开发实战(完整版).part2

    13.6.1 如何产生任务 13.6.2 任务调度对应用程序集群的影响 13.6.3 任务调度云 13.6.4 Web应用程序中调度器的启动和关闭问题 13.7 小结 第14章 使用OXM进行对象XML映射 14.1 认识XML解析技术 14.1.1 什么是XML ...

    Spring3.x企业应用开发实战(完整版) part1

    13.6.1 如何产生任务 13.6.2 任务调度对应用程序集群的影响 13.6.3 任务调度云 13.6.4 Web应用程序中调度器的启动和关闭问题 13.7 小结 第14章 使用OXM进行对象XML映射 14.1 认识XML解析技术 14.1.1 什么是XML ...

    AutoCode代码生成器(JAVA版)

    如果您是经常使用Hibernate或其他插件的java开发人员,一定会为Hibernate或其他插件的配置部署问题而搞懵,这些类型的插件有个最大的问题是其核心操作均是由该插件的内部完成,对开发人员来说是个黑匣子(一般用户...

    autocode中文java版

    如果您是经常使用Hibernate或其他插件的java开发人员,一定会为Hibernate或其他插件的配置部署问题而搞懵,这些类型的插件有个最大的问题是其核心操作均是由该插件的内部完成,对开发人员来说是个黑匣子(一般用户...

    lamp-cloud微服务脚手架

    利用Zipkin实现微服务的全链路性能监控, 从整体维度到局部维度展示各项指标,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。...

    JAVA上百实例源码以及开源项目

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    JAVA上百实例源码以及开源项目源代码

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包---java 源码 大量 实例

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包2

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包3

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

    java源码包4

     关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥...

Global site tag (gtag.js) - Google Analytics