`
yangzhibin_java
  • 浏览: 52035 次
  • 性别: 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 (需要类增强工具 )

 

分享到:
评论

相关推荐

    hibernate的缓存机制和session对象的产生方式案例

    当同样的查询被执行多次时,Hibernate会首先查看查询缓存,如果缓存中有结果,则直接返回,无需再次执行SQL。不过,查询缓存对数据一致性要求较高,一旦数据更新,可能需要清理相关查询结果的缓存。 接下来,我们...

    Hibernate4实战 之第五部分:Hibernate的事务和并发

    Hibernate 支持行级悲观锁,通过 SQL 的 `SELECT FOR UPDATE` 实现。 #### 四、Session与事务 **Hibernate 的 Session 与事务紧密相关**。通过 Session 可以获取事务接口,并控制事务的行为。为了提高性能和减少锁...

    Hibernate缓存机制

    - 直接使用SQL语句进行删除操作时,需要确保先清除相关缓存,以免产生不一致的情况。 #### 五、当前系统中Hibernate缓存的使用情况 **5.1 当前系统中Hibernate的使用** - 在当前系统中,如果同时存在多个应用...

    hibernATE的源代码

    - **对象关系映射(ORM)机制**:Hibernate如何将Java对象映射到数据库表,包括实体类的注解配置、配置文件(如`hibernate.cfg.xml`)的设置,以及如何通过Session接口进行增删改查操作。 - **第二级缓存**:...

    Hibernate实体层设计

    2. 自动SQL生成:根据实体的定义,Hibernate自动产生相应的SQL语句,减少了手动编写SQL的工作量。 3. 支持缓存:Hibernate内置了二级缓存机制,能有效提高系统性能。 4. 数据库无关性:Hibernate的配置文件可以...

    Hibernate官方中文参考手册

    对象通过Session接口与数据库交互,而Session是由SessionFactory产生,后者通常是通过读取配置文件(如hibernate.cfg.xml)来创建。 Hibernate的主要特点包括: 1. 提供了数据持久化能力,屏蔽了数据库操作的复杂...

    IBatisVSHibernate

    **Hibernate** 则是一个更全面的对象关系映射框架,它提供了一种自动化的对象持久化机制,将Java对象直接映射到数据库表,简化了数据库访问。Hibernate通过实体类、持久化注解或者XML配置文件定义对象与数据库表的...

    Hibernate_Tools_for_Eclipse插件的安装和使用

    下面将介绍如何使用 Hibernate Code Generation 产生实体类。 1. 创建一个新的 Hibernate 工程,选择 File -New -Hibernate Configuration File(cfg.xml),打开创建 Hibernate 配置向导。 2. 配置 Hibernate ...

    在eclipse中使用hibernate

    - **Transaction**:事务管理是确保数据一致性的关键,Hibernate提供了对事务的自动管理机制。 - **HQL**:HQL是一种面向对象的查询语言,它允许以面向对象的方式构建查询语句,而无需直接编写SQL语句。 #### 5. ...

    Hibernate 课件_基础入门

    - **Hibernate概述**:Hibernate是一个非常优秀的Java持久层框架,提供了强大的对象与关系数据库之间的映射机制,大大简化了数据持久化的过程。它允许开发人员以面向对象的方式处理数据库,而无需直接编写SQL语句。 ...

    Hibernate缓存,性能优化

    在IT领域,尤其是在Java开发中,Hibernate作为一款流行的开源对象关系映射(ORM)框架,其缓存机制是实现高性能数据库交互的关键技术之一。本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### ...

    Hibernate3.5.0

    首先,Hibernate的核心功能在于它提供了对象和数据库之间的映射机制。通过XML配置文件或注解,开发者可以定义对象模型与数据库表之间的对应关系。例如,一个Java类可以映射到数据库中的一个表,类的属性对应于表的列...

    HIBERNATE符合Java习惯的关系数据库持久化

    在Java编程中,直接处理SQL语句可能会导致代码冗余且难以维护,而Hibernate通过将Java对象与数据库表进行映射,使得我们可以用面向对象的方式来处理数据,极大地提高了开发效率。 在“HIBERNATE - 符合Java习惯的...

    Hibernate缓存技术研究

    然而,由于对象模型和关系型数据库模型之间的映射会产生一定的性能开销,Hibernate引入了一套缓存机制来提高数据访问的效率。 #### 二、Hibernate的缓存结构 Hibernate的缓存机制分为两层:第一级缓存(Session...

    hibernate-2.1.8

    3. **查询语言HQL**:Hibernate查询语言(HQL)是面向对象的查询语言,类似于SQL,但更适应于对象模型,便于开发者编写复杂的查询语句。 4. ** Criteria查询**:除了HQL,Hibernate还提供了Criteria API,允许动态...

    Hibernate 中文手册 3.1.2.pdf

    3. Hibernate 提供了缓存机制来提高数据访问性能,包括一级缓存和二级缓存。 4. Hibernate 支持延迟加载和事务管理,这为复杂的数据操作带来了很大的便利。 5. 与 Spring 框架集成良好,是 Spring 应用程序中常用...

    java私塾独家首发最新Hibernate4教程

    通过使用Hibernate,开发者可以避免编写大量的SQL代码,并能够更加专注于业务逻辑的实现。 **1.2 ORM映射原理** 对象关系映射(ORM)是一种程序技术,用于将关系型数据库的数据映射到面向对象语言中。在Hibernate4...

    sql主键产生器

    "SQL主键产生器"就是这样一个工具,它能帮助我们在创建或更新表时自动为主键字段生成唯一值。 SQL主键产生器通常有以下几种实现方式: 1. **序列(Sequences)**:在某些数据库系统如Oracle中,可以创建序列对象来...

    hibernate3.2 源码

    这个压缩包包含的是Hibernate 3.2版本的源代码,这是一个非常重要的里程碑,因为它在当时引入了许多改进和新特性,对Java社区产生了深远的影响。 在Hibernate 3.2中,有几个关键的知识点值得一提: 1. **对象关系...

Global site tag (gtag.js) - Google Analytics