`
xiaoCong
  • 浏览: 7407 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate

阅读更多

【事务】

  事务是数据库上一个或多个操作序列,可以理解为一条或多条SQL语句,使所有数据库操作要么都执行,要么都不执行;

      原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

  一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

  隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

 

1 为什么要有隔离级别?
两个或以上事务使用同一资源(记录)时,如果没有隔离级别,谁都可以去操作利用资源,这让记录具有了不确定性,然后根据这些不确定性的、有时是错误的记录去做出一些决定,显然会导致错误。隔离级别是为了解决并发问题。错误具体表现:

 错度: 因为一个事务修改了记录,未提交,随后发生了回滚
 非重复读:因为一个事务修改了记录
假读: 因为一个事务修改了记录,所以两次查询结果不一样

 

2 事务的隔离级别

  

  Read Uncommited,能读到其他事务更改但未提交的数据。

  Read Commited,   不能读到其他事务更改但未提交的数据,但是能读到其他事务已经提交的数据。

  Repeatable Read,  在事务中已经查询过的数据,其他事务不能做Update的操作,但是可以Insert新数据。

  Serializable,          在事务中已经查询过的表,其他事务不能做更改(包括Insert),更改的操作会被block住。

 

 

【HIBERNATE对象标识符(OID)】

   在JAVA中,通过地址来区分类的不同对象,在关系型数据库中,通过主键来表示一条记录,这个主键不能为NULL,不能重复,不可修改,HIBERNATE用OID把二者联系起来 。

   我们通过<id></id>来配置OID,OID生成方法,HIBERNATE提供了7种:

  increnment:生成OID的机制不依赖底层数据库,适合所有的数据库,但它只适用于只有单个HIBERNATE进程访问同一个数据库的场合。所有集群环境下不用。

     (双击图片,效果好一些)

 

 

 【SQL语句分析】

  1.分组函数执行顺序:

   ·根据from中的表做笛卡尔积

   ·where条件验证

   ·使用group by

   ·产生select后面要求的项

   ·使用HAVING条件

   ·使用distinct

   ·使用order by

 

   2.group by

   +--------------+-------+--------+--------+
| idsaleperson | state | leader | record |
+--------------+-------+--------+--------+
|            1 | ab    | 12     |      1 |
|            2 | ab    | 13     |      2 |
|            3 | ab    | 14     |      3 |
|            4 | cd    | 11     |      4 |
|            5 | ef    | 11     |      5 |
|            6 | cd    | 12     |      6 |
|            7 | fg    | 12     |      7 |
|            8 | NULL  | NULL   |      8 |
+--------------+-------+--------+--------+

 

  如上,在MYSQL中,group by state,则只会显示一条记录

group by state,leader,则所有结果都显示:

  +--------------+-------+--------+-------------+
| idsaleperson | state | leader | sum(record) |
+--------------+-------+--------+-------------+
|            1 | ab    | 12     |           1 |
|            2 | ab    | 13     |           2 |
|            3 | ab    | 14     |           3 |
|            4 | cd    | 11     |           4 |
|            6 | cd    | 12     |           6 |
|            5 | ef    | 11     |           5 |
|            7 | fg    | 12     |           7 |
+--------------+-------+--------+-------------+

 

3 having 后的字段需要在select后出现过

 

 

 

【JAVA对象生命周期】
1.要保证JAVA对象不被回收,HOW?
   方法一:让对象的引用始终存在,当一个对象失去引用时,该对象很快就会被当做垃圾了 
   方法二:save到hibernate的session缓存中,即使我们失去对象的引用,也可loadc出来  

2.Session会在下面的时间清理缓存(FlushMode.AUTO模式下): 
    当调用commit方法时,先清理缓存,然后向数据库提交事务

    当调用find()或iterate时,为保证查询结果最新,此时也会清理缓存

    当调用FLUSH时

 

3 Flush()与commit

   Flush()- 清理缓存,执行一系列SQL,但不提交事务

   COMMIT()-先调用flush,然后提交事务,这意味着操作被永久保存下来了


【一对多】
1.many 2 one 单向关联
  由多方负责维护关系,一方完全不管。
  <many-to-one name="group" column="groupid" cascade="all"/>
  采用cascade属性是解决TransientObjectException异常的一种手段

2 one 2 many 单向关联
   由一方负责维护关系,会发出多余的update语句

3 one 2 many 双向
  * 在一一端的集合上使用<key>,在对方表中加入一个外键指向一一端
* 在多一端采用<many-to-one>

注意:<key>标签指定的外键字段必须和<many-to-one>指定的外键字段一致,否则引用字段的错误

如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多
的一端来维护关联关系

关于inverse属性:
   背景:当我们commit时,通常情况,如果HIBERNATE发现内存中中的对象状态发生改变,那么它也会发出相应的SQL语句,所以有时会产生重复的SQL。
inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,
默认inverse为false,所以我们可以从”一“一端和”多“一端维护关联关系,
如果设置成inverse为true,则我们只能从多一端来维护关联关系

注意:inverse属性,只影响数据的存储,也就是持久化

inverse和cascade
* inverse是关联关系的控制方向
* cascade操作上的连锁反应

-------------------------------------------------------------------------------------------------------------------------------------------
【多对多】

 

  • 大小: 45.7 KB
  • 大小: 118.7 KB
2
0
分享到:
评论
1 楼 yelang2009 2010-10-08  
ding again
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Hibernate 配置各种数据库

    Hibernate 配置各种数据库 Hibernate 是一个基于 Java 的持久层框架,提供了一个抽象的数据访问层,能够与多种数据库进行集成。在 Hibernate 的配置文件中,我们可以配置不同的数据库连接,包括驱动程序、URL 等...

    hibernate jar包:hibernate-commons-annotations-4.0.1.Final.jar等

    Hibernate.jar包,Hibernate可以应用在任何使用JDBC的场合,包含 hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-...

    Hibernate入门到精通

    "Hibernate入门到精通" Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 ...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...

    hibernate学习资料大全

    【hibernate学习资料大全】 Hibernate 是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。这个压缩包包含了丰富的Hibernate学习资源,旨在帮助开发者深入理解和熟练掌握这一强大的...

    Hibernate-extensions 完整安装包

    《Hibernate-Extensions全面指南》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。然而,为了满足更复杂的业务需求,Hibernate还提供了丰富的扩展功能,这就是我们今天要...

    hibernate-release-4.1.4

    【描述】中的"hibernate的jar包"指的是Hibernate框架的运行库文件,这些JAR文件包含了Hibernate的所有核心API、实现和依赖库,如Hibernate Commons Annotations、Hibernate EntityManager、Hibernate Core等。...

    hibernate基础jar包

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。这个压缩包包含了Hibernate的基础jar包,这些jar文件是开发Hibernate应用所...

    HibernateTools-3.2.4

    HibernateTools是Java开发人员在使用Hibernate ORM框架时的有力辅助工具集,主要目的是为了提高开发效率,简化数据库操作。在HibernateTools 3.2.4版本中,它包含了一系列的特性与插件,以支持更便捷地进行对象关系...

    kingbaseV8 hibernate jdbc 驱动

    在Java开发环境中,与KingbaseV8数据库进行交互通常会用到Hibernate框架和JDBC驱动。 Hibernate是一个优秀的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作,通过将Java对象与数据库表进行映射,...

    hibernate3全部jar包:hibernate3.jar.zip 下载

    Hibernate3 是一个强大的Java持久化框架,它允许开发者将数据库操作与业务逻辑解耦,使得应用程序的开发更为简便。这个“hibernate3全部jar包:hibernate3.jar.zip”包含了所有必要的库文件,方便用户一次性下载并...

    Hibernate3的依赖包

    Hibernate3是一个广泛使用的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作,极大地简化了Java应用程序与数据库之间的交互。在这个"Hibernate3的依赖包"中,包含了运行Hibernate3应用...

    hibernate和MySQL的jar

    标题中的“hibernate和MySQL的jar”指的是Hibernate ORM框架与MySQL数据库之间的连接库。Hibernate是一种流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的编程方式来操作数据库,而无需直接编写SQL...

    hibernate4.3完整jar包

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

    Hibernate 中文api 等学习资料

    标题"Hibernate 中文api 等学习资料"暗示了这是一组针对Hibernate ORM框架的中文学习资源,包括API文档和其他指南,旨在帮助用户更好地理解和使用Hibernate。 描述中的"hibernate orm框架api中文文档,学习资料,...

    hibernate.5.1.0.jar全部

    包含hibernate所有所需jar包还有一些其他包日志包、jpa支持包等: 列如:hibernate-core-5.1.0.Final.jar hibernate-ehcache-5.1.0.Final.jar hibernate-entitymanager-5.1.0.Final.jar hibernate-envers-5.1.0....

    Hibernate入门jar包

    Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使开发者可以更加专注于业务逻辑而不是数据访问层的实现。本压缩包提供的是Hibernate入门所需的jar包,包括了Hibernate的核心库以及与之...

    hibernate3必要jar包

    Hibernate3 是一个非常重要的Java持久化框架,它允许开发者将对象模型与数据库关系模型进行映射,从而简化了数据存取的过程。这个压缩包“hibernate3必要jar包”显然是针对Hibernate3版本的,已经去除了冗余的库文件...

    hibernate所需包:hibernate3,依赖包,JDBC

    Hibernate3是Hibernate的第三个主要版本,发布于2005年,它提供了一种将Java对象与数据库表之间的映射方式,使得数据库操作更加面向对象。该框架支持多种数据库,包括MySQL、Oracle、SQL Server等,并且通过JDBC API...

    hibernate_3.2官方开发包

    Hibernate 是一个著名的开源对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方式,使得在Java应用程序中操作数据库变得更加简单。这个“hibernate_3.2官方开发包”包含了所有你需要开发基于...

Global site tag (gtag.js) - Google Analytics