`
在水伊方
  • 浏览: 111600 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Hibernate组件关联

 
阅读更多

组件(Component)是一个被包含的对象,在持久化的过程中,它被当作值类型,而并非一个实体的引用(即数据库中没有表与该属性对应,但该类的属性要之久保存的。)。举个例子, 你对人(Person)这个概念可以像下面这样来建模:

public class Person {
    private java.util.Date birthday;
    private Name name;
    private String key;
    public String getKey() {
        return key;
    }
    private void setKey(String key) {
        this.key=key;
    }
    public java.util.Date getBirthday() {
        return birthday;
    }
    public void setBirthday(java.util.Date birthday) {
        this.birthday = birthday;
    }
    public Name getName() {
        return name;
    }
    public void setName(Name name) {
        this.name = name;
    }
    ......
    ......
}

 

public class Name {
    char initial;
    String first;
    String last;
    public String getFirst() {
        return first;
    }
    void setFirst(String first) {
        this.first = first;
    }
    public String getLast() {
        return last;
    }
    void setLast(String last) {
        this.last = last;
    }
    public char getInitial() {
        return initial;
    }
    void setInitial(char initial) {
        this.initial = initial;
    }
}

 

在持久化的过程中,姓名(Name)可以作为人(Person)的一个组件。需要注意的是:你应该为姓名的持久化属性定义getter和setter方法,但是你不需要实现任何的接口或申明标识符字段。

 

以下是这个例子的Hibernate映射文件:

<class name="eg.Person" table="person">
    <id name="Key" column="pid" type="string">
        <generator class="uuid"/>
    </id>
    <property name="birthday" type="date"/>
    <component name="Name" class="eg.Name"> <!-- class attribute optional -->
        <property name="initial"/>
        <property name="first"/>
        <property name="last"/>
    </component>
</class>

 

人员(Person)表中将包括pid, birthday, initial, firstlast等字段。

 

就像所有的值类型一样, 组件不支持共享引用。 换句话说,两个人可能重名,但是两个Person对象应该包含两个独立的Name对象,只不过这两个Name对象具有“同样”的值。 组件的值可以为空,其定义如下。 每当Hibernate重新加载一个包含组件的对象,如果该组件的所有字段为空,Hibernate将假定整个组件为空。 在大多数情况下,这样假定应该是没有问题的。

 

组件的属性可以是任意一种Hibernate类型(包括集合, 多对多关联, 以及其它组件等等)。嵌套组件不应该被当作一种特殊的应用(Nested components should not be considered an exotic usage)。 Hibernate倾向于支持细致的(fine-grained)对象模型。

 

<component> 元素还允许有 <parent>子元素,用来表明component类中的一个属性是指向包含它的实体的引用。

<class name="eg.Person" table="person">
    <id name="Key" column="pid" type="string">
        <generator class="uuid"/>
    </id>
    <property name="birthday" type="date">
    <component name="Name" class="eg.Name" unique="true">
        <parent name="namedPerson"/> <!-- reference back to the Person -->
        <property name="initial"/>
        <property name="first"/>
        <property name="last"/>
    </component&gt;
</class>

 

以上摘抄于Hibernate文档-->第 8 章 组件(Component)映射-->8.1. 依赖对象(Dependent objects)

分享到:
评论

相关推荐

    hibernate组件之间的关联

    在 Hibernate 中,组件之间的关联是实现对象模型与数据库表之间映射的关键部分,它包括了一对一、一对多、多对一、多对多等多种关联类型。本篇文章将深入探讨 Hibernate 组件之间的关联机制及其应用。 **一对一关联...

    hibernate组件映射

    在Hibernate中,组件(Component)是一种特殊的关联关系,它将一个类的实例嵌入到另一个类中,就像Java中的内部类一样。组件可以是任何复杂的对象结构,如地址、时间戳等,它们作为主对象的一部分存储在数据库中。...

    Hibernate组件映射代码详解

    "Hibernate组件映射代码详解" titre的知识点: * Hibernate组件映射代码的概念和实现 * 组件关联映射的属性和特点 * Hibernate组件映射的优点和应用场景 描述的知识点: * Hibernate组件映射代码的详细解释 *...

    Hibernate数据关联映射与继承策略

    在`java组件——hibernate.ppt`和`HibernatePractice`中,可能会包含关于如何在实际项目中设置这些映射和继承策略的示例。例如,如何配置 XML 映射文件(hbm.xml)或使用注解进行映射,以及如何在代码中操作这些关联...

    Hibernate组件映射(annotation/xml)

    《Hibernate组件映射:Annotation与XML的融合》 在Java持久化领域,Hibernate是一个不可或缺的框架,它提供了强大的对象关系映射(ORM)能力。本文将深入探讨Hibernate中的组件映射,包括使用注解(Annotation)和...

    43-Hibernate数据关联实现〖MVSN〗_Struts + DAO + Hibernate(6).rar

    这个教程可能涵盖了如何在MVC(Model-View-Controller)架构中整合这三个组件,并且重点在于第六部分的数据关联实现。接下来,我们将深入探讨这些关键知识点。 **Hibernate框架**:Hibernate是一个流行的开源Java...

    hibernate中的相关组件的介绍

    ### Hibernate中的相关组件介绍 #### 一、Hibernate配置文件(`hibernate.cfg.xml`) 在Hibernate框架中,默认的配置文件被命名为`hibernate.cfg.xml`。此配置文件是Hibernate初始化过程中的关键组成部分,它定义...

    23-Hibernate数据关联(11、M1、1N、MN)

    在Java的持久化框架中,Hibernate是一个非常重要的组件,它为开发者提供了强大的对象关系映射(ORM)功能,使得在数据库操作上可以采用面向对象的方式。本教程将深入探讨Hibernate中的四种主要数据关联:一对一(11...

    Hibernate一对一,一对多,多对多实例

    在Java的持久化框架中,Hibernate是一个非常重要的组件,它提供了强大的对象关系映射(ORM)功能,使得开发者可以方便地将数据库操作转化为面向对象的编程。本实例将深入探讨Hibernate中的三种基本关联关系:一对一...

    关联映射hibernate的criteria的用法

    通过阅读`Hibernate--Criteria`中的源码,你可以深入了解Criteria API的工作原理,以及如何与其他Hibernate组件(如SessionFactory、Session和Query)协同工作。理解源码能帮助你在实际项目中更好地应用和优化...

    hibernate-release-5.2.10

    8. **延迟加载**:Hibernate的懒加载策略可以在需要时才加载关联对象,提高系统性能。 9. **事件监听器**:允许自定义事件监听器来扩展Hibernate的功能,如在对象保存或更新时触发某些操作。 10. **类型转换**:...

    hibernate-jar

    描述中反复提到"hibernate的核心jar包在这",这暗示了提供的压缩文件`hibernate-jar`可能包含了Hibernate框架的核心组件,例如`hibernate-core.jar`。这个核心JAR文件通常包括以下关键组件: 1. **SessionFactory**...

    struts+hibernate+jdbc双表查询

    Struts、Hibernate和JDBC是Java Web开发中的三个重要组件,它们各自负责应用程序的不同层面。在构建复杂的Web应用时,通常会结合使用这些技术来实现高效的数据管理。 Struts是MVC(Model-View-Controller)框架的一...

    hibernate aip hibernate aip

    Hibernate的核心组件包括Configuration、SessionFactory、Session、Transaction和Query。Configuration负责读取配置文件并初始化SessionFactory,SessionFactory是线程安全的,用于创建Session实例。Session是与...

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

    hibernate3.jar是主要的Hibernate库文件,包含了框架的核心组件,包括Entity管理、Session接口、Transaction管理、Query服务等。这个单一的JAR文件使开发人员能够快速地在项目中集成Hibernate3,而不必逐个添加众多...

    hibernate和MySQL的jar

    在描述中提到的“核心jar,亲测可用,跑demo是够用了”,这表明这些jar文件包含了运行Hibernate与MySQL交互所需的基本组件,并且已经有人验证过它们在演示或测试环境中可以正常工作。通常,这包括Hibernate的核心库...

    Hibernate实战

    此外,还涵盖了如何使用SessionFactory和Session对象,它们是Hibernate操作数据库的核心组件。 实体管理是Hibernate中的重要部分,书中会详细介绍如何定义实体类,使用注解来声明属性与数据库字段的映射,以及如何...

    hibernate配置文件详解

    Hibernate 的配置文件是其核心组件之一,用于定义 Hibernate 的运行期参数。下面我们将详细介绍 Hibernate 配置文件的结构和内容。 一、hibernate.cfg.xml 文件 hibernate.cfg.xml 文件是 Hibernate 的基本配置...

    hibernate-3.2源代码

    二、核心组件解析 1. SessionFactory:它是Hibernate的主要工厂类,负责配置、加载和管理所有持久化类的元数据,创建Session实例。 2. Session:是与数据库交互的接口,负责保存、更新和删除实体对象,以及执行HQL和...

    hibernate的jar包

    描述中提到"用的挺久了,挺全面的",暗示这个jar包可能包含了Hibernate的核心组件以及一些常用的扩展,比如支持DOM4J库,这是一个用于XML处理的Java库,常在Hibernate中用于读写XML配置文件。另外,还提及了"orcle...

Global site tag (gtag.js) - Google Analytics