`

Hibernate 继承 及 锁

阅读更多

 

每个类继承树映射成一张表

、理解如何映射
  因为类继承树肯定是对应多个类,要把多个类的信息存放在一张表中,必须有某种机制来区分哪些记录是属于哪个类的。
 这种机制就是,在表中添加一个字段,用这个字段的值来进行区分。用hibernate实现这种策略的时候,有如下步骤:
 父类用普通的<class>标签定义
 在父类中定义一个discriminator,即指定这个区分的字段的名称和类型
 如:<discriminator column=”XXX” type=”string”/>
 子类使用<subclass>标签定义,在定义subclass的时候,需要注意如下几点:
 Subclass标签的name属性是子类的全路径名
 在Subclass标签中,用discriminator-value属性来标明本子类的discriminator字段(用来区分不同类的字段)
 的值Subclass标签,既可以被class标签所包含(这种包含关系正是表明了类之间的继承关系),也可以与class标
 签平行。 当subclass标签的定义与class标签平行的时候,需要在subclass标签中,添加extends属性,里面的值
 是父类的全路径名称。子类的其它属性,像普通类一样,定义在subclass标签的内部。

2、理解如何存储
 存储的时候hibernate会自动将鉴别字段值插入到数据库中,在加载数据的时候,hibernate能根据这个鉴别值
 正确的加载对象
 
多态查询:在hibernate加载数据的时候能鉴别出其真正类型(instanceof)

get支持多态查询
load只有把lazy设置为false才支持多态查询
hql支持多态查询
----------------------------------

每个子类映射成一张表

1、理解如何映射
  这种策略是使用joined-subclass标签来定义子类的。父类、子类,每个类都对应一张数据库表。
 在父类对应的数据库表中,实际上会存储所有的记录,包括父类和子类的记录;在子类对应的数据库表中,
 这个表只定义了子类中所特有的属性映射的字段。子类与父类,通过相同的主键值来关联。实现这种策略的时候,
 有如下步骤:
 父类用普通的<class>标签定义即可
 父类不再需要定义discriminator字段
 子类用<joined-subclass>标签定义,在定义joined-subclass的时候,需要注意如下几点:
 Joined-subclass标签的name属性是子类的全路径名
 Joined-subclass标签需要包含一个key标签,这个标签指定了子类和父类之间是通过哪个字段来关联的。
 如:<key column=”PARENT_KEY_ID”/>,这里的column,实际上就是父类的主键对应的映射字段名称。
 Joined-subclass标签,既可以被class标签所包含(这种包含关系正是表明了类之间的继承关系),
 也可以与class标签平行。 当Joined-subclass标签的定义与class标签平行的时候,需要在Joined-subclass
 标签中,添加extends属性,里面的值是父类的全路径名称。子类的其它属性,像普通类一样,定义在joined-subclass标签的内部。
-----------------------------------
每个具体类一张表

1、理解如何映射
 这种策略是使用union-subclass标签来定义子类的。每个子类对应一张表,而且这个表的信息是完备的,
 即包含了所有从父类继承下来的属性映射的字段(这就是它跟joined-subclass的不同之处,
 joined-subclass定义的子类的表,只包含子类特有属性映射的字段)。实现这种策略的时候,有如下步骤:
 父类用普通<class>标签定义即可
 子类用<union-subclass>标签定义,在定义union-subclass的时候,需要注意如下几点:
 Union-subclass标签不再需要包含key标签(与joined-subclass不同)
 Union-subclass标签,既可以被class标签所包含(这种包含关系正是表明了类之间的继承关系),
 也可以与class标签平行。 当Union-subclass标签的定义与class标签平行的时候,需要在Union-subclass
 标签中,添加extends属性,里面的值是父类的全路径名称。子类的其它属性,像普通类一样,
 定义在Union-subclass标签的内部。这个时候,虽然在union-subclass里面定义的只有子类的属性,
 但是因为它继承了父类,所以,不需要定义其它的属性,在映射到数据库表的时候,依然包含了父类的所
 有属性的映射字段。

注意:在保存对象的时候id不能重复(不能使用自增的方式生成主键)
-----------------------------------

component映射

在hibernate中,component是实体对象的逻辑组成部分,它与实体对象的根本区别在于没有oid

采用component映射的好处:实现了对象模型的细粒度划分,层次分明,利于复用

 

 

 

复合主键映射(联合主键)

通常将复合主键相关的属性放到一个单独的类中,这个是有约束的:
 * 必须实现序列化接口
 * 必须复写hashCode和equals方法
 
----------------------------------
悲观锁
 悲观锁的实现:通常依赖于数据库机制,在整个过程中将数据锁定
 其他任何用户都不能读取和修改
 
 
------------------------------

乐观锁

大多数基于数据版本记录机制(version)实现,一般在数据库中怎加一个version字段
读取时将版本号一同读出,之后更新时对版本号加一,如果提交的数据小于或等于当前版本号
则认为数据是过期的,否则给予更新
 

分享到:
评论

相关推荐

    Hibernate 经典例子全

    Hibernate支持单继承和多层继承的映射,通过`&lt;subclass&gt;`或`&lt;joined-subclass&gt;`标签将子类映射到数据库中的特定表,这在设计复杂的对象模型时非常有用。 **四、一对一关系映射** 在`hibernate_one2one_ufk_1`示例...

    Hibernate4.1

    12. **继承映射**:Hibernate支持单表继承、联合继承和表-per-hierarchy继承策略,使得面向对象的继承关系可以映射到数据库中。 13. **查询优化**:包括预编译查询、批处理、使用集合的size()方法代替迭代、避免...

    hibernate中文帮助文档

    乐观锁定版本控制:通过`@Version`注解,Hibernate可以实现乐观锁,防止并发更新时的数据冲突。 2.2.2. 映射简单属性和嵌入式对象:使用`@Column`注解映射简单属性,如字符串、整数等。`@Embeddable`和`@Embedded`...

    hibernate源码分析过程

    Hibernate 的继承映射可以将一个对象的继承关系映射到数据库中。继承映射可以是整个继承关系都在一个表中、每个子类一个表、每个具体类一个表、隐式多态等。 使用 Hibernate 可以通过 API 查询、更新对象。API ...

    hibernate源码

    `hibernate_extends_1`和`hibernate_extends_2`揭示了Hibernate的类继承映射机制。通过`&lt;extends&gt;`标签,子类可以共享父类的表映射,减少冗余代码,实现多态查询。 3. **一对一关联**: `hibernate_one2one_ufk_1...

    Hibernate关键知识点大全

    - Hibernate支持单表继承、联合继承等多种对象继承策略的映射,允许对象模型的复杂性映射到数据库。 7. **集合映射** - Hibernate支持列表、集合、映射等类型的集合映射,如`@OneToMany`、`@ManyToMany`等,实现...

    Hibernate项目开发宝典源码(完整版)

    8. **order**:订单系统,可能包含订单创建、支付、取消等业务逻辑,这可能会用到Hibernate的乐观锁、悲观锁机制,以及复杂的查询和更新操作。 通过对这些文件夹的分析,我们可以深入学习以下知识点: - Hibernate...

    hibernate3.0纯jar包

    14. **实体的版本控制**: Hibernate支持乐观锁和悲观锁机制,确保在并发环境下数据的一致性。 15. **连接池集成**: Hibernate可以与其他连接池(如C3P0、Apache DBCP等)集成,有效管理数据库连接,提高系统性能。 ...

    HIBERNATE doc_document_官方文档_4.3.6_final_2014_8

    - **继承的实现、equals()和hashCode()方法的实现、动态模型、Tuplizers、实体名称解析器**: 这些是更高级的ORM概念,说明了如何在Hibernate中实现继承、对象比较以及在运行时处理对象模型的变化。 - **Hibernate...

    hibernate3.1.2参考文档

    - Hibernate抛出的异常通常继承自JPA的PersistenceException,如ConstraintViolationException(违反约束)和OptimisticLockingFailureException(乐观锁失败)。 通过以上内容,你可以开始着手使用Hibernate ...

    hibernate 参考手册

    2. **实现继承**:讲述了如何在Hibernate中处理继承关系,包括单表继承、多表继承等策略。 3. **equals()和hashCode()方法**:解释了在使用集合时,持久化类需要正确覆盖equals()和hashCode()方法。 4. **动态模型...

    Hibernate注解jar包

    - `@Version`:乐观锁,用于跟踪实体的版本信息,防止并发问题。 4. **关联关系注解**: - `@OneToOne`:一对一关联,可设置`mappedBy`属性表示被关联方。 - `@ManyToOne`:多对一关联,通常与`@JoinColumn`结合...

    hibernate3 帮助文档CHM

    13. **其他高级特性**:如级联操作、联合主键、复合主键、外键约束、乐观锁和悲观锁等。 综上所述,《Hibernate3 帮助文档 CHM》是Java开发者不可或缺的参考资料,无论你是初学者还是经验丰富的开发者,都可以从中...

    hibernate 经典题目 其中包括很多核心的题目

    【hibernate】知识点详解: ...这些知识点覆盖了 Hibernate 的基础配置、映射机制、关系映射、主键生成、查询语言、API 使用及对象状态管理等方面,对初级程序员来说,理解并掌握这些内容是学习 Hibernate 的重要基础。

    hibernate3.3.1的jar包

    - **实体类**:继承Hibernate的持久化类`Serializable`,并使用`@Entity`注解标识为数据库表的映射类。 - **属性映射**:使用`@Id`定义主键,`@GeneratedValue`定义主键生成策略,其他属性使用`@Column`进行映射。...

    BONC_Hibernate

    - **实现继承**:介绍如何在Hibernate中实现类继承。 - **实现equals()和hashCode()方法**:确保实体对象正确比较和存储。 - **动态模型**:动态生成实体类的机制。 - **元组片段映射**:高级映射技术之一。 5....

    Spring整合HIbernate

    7. **版本控制**:利用Hibernate的乐观锁或悲观锁机制,保证数据一致性。 通过以上步骤和实践,我们可以有效地整合Spring和Hibernate,构建出高效且易于维护的Java应用。在实际开发中,还需要根据项目需求灵活调整...

    Hibernate 注解说明文档

    3. **@Version**: 版本号注解,用于乐观锁机制。 通过以上注解的灵活运用,开发者可以构建出高效、易维护的Hibernate应用。阅读《Hibernate注解API.pdf》和相关HTML文档,能更深入地了解每个注解的具体用法和场景,...

Global site tag (gtag.js) - Google Analytics