当前位置: 首页 > 图文教程 > Java技术 > Web框架 > 浅谈Hibernate依赖对象(Dependent objects)

Web框架
Web框架:addOptions and removeAllOptions
Web框架:Xfire与Spring集成那些事
Web框架:多个dwr.xml配置方法
Web框架:小编整理Hibernate 基本查詢
Web框架:DWR使用中的web.xml配置
Web框架:Struts2使用Spring插件完成整合
Web框架:小编叙Spring的事务管理
Web框架:Struts2国际化实现用户自行选择语言
Web框架:Struts2中加载资源文件的方式
Web框架:Struts2中整合图表工具JFreeChart的时间顺序图
Web框架:浅谈Struts2的内建校验器
Web框架:FreeMarker中的escape , noescape指令
Struts2的Visitor校验器
Struts2中的subset标签使用方法浅谈
Hibernate核心接口那些事
Spring中的依赖注入
Spring中的Inversion of Control 容器
浅析Spring中的单元测试
用StrutsTestCase测试Struts应用程序
浅谈Struts中html:options的使用

Web框架 中的 浅谈Hibernate依赖对象(Dependent objects)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-23   浏览: 176 ::
收藏到网摘: n/a

组件(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)的一个组件。需要注意的是:你应该为姓名的持久化属性定义gettersetter方法,但是你不需要实现任何的接口或申明标识符字段。

 

以下是这个例子的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, first last等字段。

 

就像所有的值类型一样, 组件不支持共享引用。 换句话说,两个人可能重名,但是两个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>