`
persistC
  • 浏览: 73526 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate 六

阅读更多
一、复习
实体状态
   transient 临时状态  only in memory , not associted with persistent manager ,  new Entity()
   persistent  持久状态 both in memory(associted with persistent manager) and in database
   detached 游离状态   both in memory(not associted with persistent manager) and in database          
  
关联关系

J2EE分层
表现层,业务层,数据层

二、Hibernate控制的事务

ACID
atomicity consistency isolation durability

事务保证原子操作的不可分,也就是操作的同时成功或同时失败。
Transaction tran=session.beginTranaction();
tran.commit();
tran.rollback();
以上是事务对象的方法,来实现对事务的支持。

三、hibernate的事务隔离级别

hibernate的事务隔离级别和JDBC中大致相同。
设置时要在hibernate.cfg.xml配置
<property name="hibernate.connection.isolation">4</property>
1,读未提交的数据(Read uncommitted isolation)
2,读已提交的数据(Read committed isolation)
4,可重复读级别(Repeatable read isolation)
8,可串行化级别(Serializable isolation)

四、hibernate的锁(悲观锁,乐观锁)
session.get(User.class , userid , LockMode.UPGRADE);

悲观锁是由数据库本身所实现的,会对数据库中的数据进行锁定,也就是锁行。
LockMode.UPGRADE,修改锁,在get()方法中加上这个设置作为第三个参数。
LockMode.NONE 无锁机制
LockMode.READ 读取锁
LockMode.WRITE 写入锁,不能在程序中直接使用
还可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法来设置锁

乐观锁,也就是通过对记录加上某些信息来解决并发访问的问题。

版本检查
要在其表中多加上一列表示版本信息,会在读取时读到这个版本号,并在修改之后更新这个版本号,并且只有版本号相同才会予以更新,如果版本号低,就会抛出例外。
<version name="version" column="version" type="integer" />

时间戳
使用时间戳,是通过最后修改时间来判断是否来做更新操作,也就是只有在最后更新时间之后才会做更新。
<timestamp name="updateTime" column="updatetime"/>

五、类继承关系映射

建表策略
(1)所有类建一个表 (2)只为具体类建表 (3)每个类建一个表。

只为具体类建表,使用于不使用多态的情况下,具体类之间没有继承关系时适用
需要针对每个类写映射配置文件,就和普通的单表映射的xml文件相同。
也可以使用一个xml文件来进行映射,可以通过写union-subclass标签来表现其关系
这里不能使用id生成策略中的native,而是要指定特定的生成策略。

例:

<union-subclass name="notpad" table="tpcc_notpad">
    <property name="wight" column="wight" type="integer"/>
</union-subclass>
<union-subclass name="desktop" table="tpcc_desktop">
         <property name="LCD" column="isLCD" type="yes_no"/>
</union-subclass>


每个类建一个表,可以有效减少数据的冗余,减少字段,查询效率不很高。
正对每个类建一个表,只要写一个配置文件来进行类的映射即可
映射文件中的子类可以使用join-subclass标签来表示,并且引用父类的主键作为共享主键,就是不需要指定id生成策略
例:

<hibernate-mapping package="alan.hbn.rel.inherit" auto-import="false">

<class name="Computer" table="tph_computer">

<id name="comid" column="comid" type="long" unsaved-value="0">
<generator class="identity"/>
</id>
<property name="price" column="price" type="integer"/>
<joined-subclass name="notpad" table="tpc_notpad">
        <key column="comid" />
        <property name="wight" column="wight" type="integer"/>
</joined-subclass>
       
<joined-subclass name="Guest" table="tpc_guest">
            <key column="comid" />
            <property name="LCD" column="isLCD" type="yes_no"/>   
</joined-subclass>
</class>

</hibernate-mapping>


所有类只建一个表,查寻效率比较高,但是会产生很多空间浪费,当子类中的非空约束,就不大适用了,这是对于子类可以使用subclass标签表示。

<hibernate-mapping package="alan.hbn.rel.inherit" auto-import="false">

<class name="Computer" table="tph_computer">

<id name="id" column="id" type="long" unsaved-value="0">
<generator class="identity"/>
</id>

<discriminator column="computer_type" type="integer"/>

<property name="price" column="price" type="integer"/>

<subclass name="Administrator" discriminator-value="ad">
          <property name="wight" column="wight" type="integer"/>
    </subclass>
       
    <subclass name="Guest" discriminator-value="gu">
     <property name="LCD" column="isLCD" type="yes_no"/>   
    </subclass>
</class>

</hibernate-mapping>

不考虑多态时,最好是用只针对具体类建表(2个表),而考虑多态时尽量使用所有类建一个表,只有当子类中的属性过多是才考虑每个类建一个表的策略。
分享到:
评论

相关推荐

    hibernate 6本资料打包(超值).rar

    hibernate 参考指南.pdf hibernateAPI.chm hibernate教学.chm hibernate文档.chm Hibernate原理与配置快速入门.pdf hibernate中文参考文档.pdf

    Hibernate相关jar包括新版本jdk不兼容旧版本的jar.zip

    在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。然而,随着Java JDK版本的不断更新,有时会出现新版本JDK与旧版Hibernate库...

    hibernate中所有数据库方言

    在探讨Hibernate中所有数据库方言之前,我们先简要回顾一下Hibernate框架本身。Hibernate是一个开源的对象关系映射(ORM)框架,用于Java应用与各种关系型数据库进行交互。它提供了强大的功能,如对象持久化、查询...

    hibernate-validator-6.0.2.Final-dist

    hibernate-validator-6.0.2.Final-dist hibernate-validator-6.0.2.Final-dist hibernate-validator-6.0.2.Final-dist

    解决Hibernate中MySQL的中文排序

    在使用Hibernate进行数据库操作时,可能会遇到MySQL数据库中文排序不正确的问题。这通常是由于字符集设置、数据库排序规则以及Hibernate的配置等因素导致的。本文将深入探讨如何解决这些问题,确保MySQL数据库中的...

    Hibernate配置文件和jar包

    6. dom4j.jar:用于XML解析和处理,Hibernate使用它来读取配置文件和映射文件。 7. jandex.jar:如果使用JPA 2.1的注解,需要这个库来解析注解信息。 8. slf4j-api.jar和slf4j-simple.jar:日志记录框架,...

    hibernate3 hibernate3

    6. 关闭Session:每次操作完毕,记得关闭Session以释放资源。 总结起来,Hibernate3是Java开发中的强大工具,它极大地简化了数据库操作,提高了开发效率。理解并熟练掌握Hibernate3的核心概念和使用方法,对于任何...

    hibernate学习资料大全

    6. **事务管理**: 在Hibernate中,事务处理是通过Session的beginTransaction()、commit()和rollback()方法实现的。了解事务的ACID特性以及如何在Hibernate中处理事务,可以确保数据的一致性。 7. **一对多、多对...

    hibernate基础jar包

    6. Session和Transaction:在Hibernate中,Session是数据库会话的代表,负责对象的持久化操作;Transaction则封装了数据库事务,确保数据操作的一致性和完整性。 7. HQL和Criteria API:Hibernate Query Language...

    hibernate3.zip 包含hibernate3.jar

    6. **事务管理**:Hibernate支持JTA(Java Transaction API)和JDBC事务管理。通过`Session`的`beginTransaction()`、`commit()`和`rollback()`方法,可以方便地控制事务的边界。 7. **缓存机制**:Hibernate包含一...

    kingbaseV8 hibernate jdbc 驱动

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

    hibernate aip hibernate aip

    6. **缓存策略**:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的)。合理利用缓存能提高性能,但需注意缓存一致性问题。 7. **性能优化**:包括延迟加载(Lazy Loading)、批处理...

    Hibernate-extensions 完整安装包

    六、安装与集成 下载Hibernate-Extensions的完整安装包(如Hibernate-extensions-2.1.3)后,将其添加到项目的类路径中。接着,在Hibernate配置文件中启用所需的扩展,并根据项目需求进行相应配置。安装过程简单...

    hibernate和MySQL的jar

    6. **持久化操作**: 使用Hibernate进行CRUD(创建、读取、更新、删除)操作时,我们可以通过`save()`、`get()`、`update()`、`delete()`等方法,以及`Criteria`、`HQL`(Hibernate查询语言)或JPQL(Java ...

    struts+sping+hibernate6

    struts+sping+hibernate qq群72861940

    hibernate annotation hibernate3

    六、事务管理注解 1. `@Transactional` 标记在方法上,表示该方法需要在数据库事务中执行。 七、缓存注解 1. `@Cacheable` 表示实体类或特定方法的结果可以被缓存。 2. `@Cache` 定义缓存配置,包括区域、策略...

    hibernate-release-4.1.4

    6. **许可证文件**:关于软件的授权信息,通常遵循Apache License 2.0等开源协议。 总之,"hibernate-release-4.1.4"这个压缩包是Hibernate 4.1.4.Final版本的完整发布,包含了所有必要的库文件、文档和示例,旨在...

    hibernate3必要jar包

    6. **第一级缓存和第二级缓存**:Hibernate内置了第一级缓存,每个Session都有自己的缓存;第二级缓存是可选的,可以跨Session共享,通常由缓存提供商如Ehcache提供。 7. **事务管理**:Hibernate支持JTA(Java ...

    Hibernate3的依赖包

    6. **实体生命周期管理**:Hibernate自动管理对象的生命周期,包括加载、持久化、脱管和删除等状态。 7. **类型转换和用户类型**:Hibernate支持基本数据类型的自动转换,同时也允许自定义复杂类型的映射。 8. **...

    hibernate实战 英文版

    6. **高级特性**:除了基础功能之外,本书还涵盖了诸如懒加载、批量更新和删除等高级特性。 #### 三、书籍特点分析 1. **权威性**:作为由Hibernate项目的创始人和核心贡献者撰写的书籍,《Hibernate实战》在内容...

Global site tag (gtag.js) - Google Analytics