`
爱像天空
  • 浏览: 197733 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

基本O/R映射(二)--Hibernate快速参考

    博客分类:
  • SSH
阅读更多
composite-id
<composite-id
        name="propertyName"
        class="ClassName"
        mapped="true|false"
        access="field|property|ClassName">
        node="element-name|."

        <key-property name="propertyName" type="typename" column="column_name"/>
        <key-many-to-one name="propertyName class="ClassName" column="column_name"/>
        ......
</composite-id>
For a table with a composite key, you may map multiple properties of the class as identifier properties. The <composite-id> element accepts <key-property> property mappings and <key-many-to-one> mappings as child elements.

<composite-id>
        <key-property name="medicareNumber"/>
        <key-property name="dependent"/>
</composite-id>
Your persistent class must override equals() and hashCode() to implement composite identifier equality. It must also implements Serializable.

例如:(  孙卫琴 <精通Hibernate:Java对象持久化技术详解> 137页

一、定义复合属性

Customer表没有定义ID代理主键,而是以NAME字段和COMPANY_ID作为复合主键,那么相应地,在Customer类中也不必定义id属性,而是以name和company_id作为OID,映射代码如下:

   <composite-id>
        <key-property name="name" column="NAME" type-"string"/>
        <key-property name="companyId" column-"COMPANY_ID" type="long"/>
</composite-id>

<version name-"version" column-"VERSIONI" unsaved-value="0"/>

创建:

  Customer customer=new Customer();
       customer.setName("Tom");
       customer.setCompanyId(11);
       session.saveOrUpdate(customer);//由于customer对象的version属性为0,因此调用save()方法

加载:

  Customer customer-=ew Customer();
       customer.setName("TOm");
       customer.setCompanyId(11);
       session.load(Customer.class,customer);

注:需要实现java.io.Serializable接口

二、定义主键类

映射复合主键的另一种方法是先定义主键类,以包含name,companyId字段,实现Serializable接口,添加映射代码如下:

  <class name="mypack.Customer" table="CUSTOMERS">
                   <composite-id name="custoerId" class="mypack.CustomerId">
                         <key-property name="name" column="NAME" type=String/>
                         <key-property name-"companyId" column="COMPANY_ID" type="long"/>
                    </composite-id>
                   <version name="version" column="VERSION" unsaved-value="0"/>

        </class>

创建:

  CustomerId customerId=new CustomerId("Tom",11);
       Customer customer=new Customer();
       customer.setCustomerId(customerId);
       session.saveOrUpdate(customer);

加载:

  CustomerId customerId=new CustomerId("Tom",11);
       Customer customer=(Customer)session.load(Customer.class,customerId);

三、外键参照

  当COMPANY_ID还作为外键参照COMPANY表,则在Customer类中:

    private CustomerId customerId;
              private Company company;

        映射代码:

   <class name="mypack.Customer" table="CUSTOMERS">
                   <composite-id name=customerId" class ="mypack.CustomerId">
                            <key-property name="name" column="NAME" type="string"/>
                            <key-property name="companyId" column="COMPANY_ID" type="long"/>
                  </composite-id>
                  <version name="version" column="VERSION" unsaved-value="0"/>
                  <many-to-one name="company" class="mypack.Company" column="COMPANY_ID"
                                 insert="false" update="fase"/>
     <!--保存或更新Customer对象时,会忽略company属性-->
            </class>

  也可用<key-many-to-one>映射

  <class name="mypack.Customer" table="CUSTOMERS">
                   <composite-id name=customerId" class ="mypack.CustomerId">
                            <key-property name="name" column="NAME" type="string"/>
        <key-many-to-one name="company"
                                                         class="mypack.Company"
                                                        column="COMPANY_ID"/>
                    <version name="version" column="VERSION" unsaved-value="0"/>

        </class>

四、Column属性

<column
        name="column_name"
        length="N"
        precision="N"
        scale="N"
        not-null="true|false"
        unique="true|false"
        unique-key="multicolumn_unique_key_name"
        index="index_name"
        sql-type="sql_type_name"
        check="SQL expression"
        default="SQL expression"/>
<formula>SQL expression</formula>
column and formula attributes may even be combined within the same property or association mapping to express, for example, exotic join conditions.

<many-to-one name="homeAddress" class="Address"
        insert="false" update="false">
    <column name="person_id" not-null="true" length="10"/>
    <formula>'MAILING'</formula>
</many-to-one>
分享到:
评论

相关推荐

    深入浅出Hibernate中文版 part1

    4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 4.7 自定义持久化实现 第5章 Hibernate高级特性 5.1 Hibernate持久化实现 5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 ...

    深入浅出Hibernate中文版 part2

    4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 4.7 自定义持久化实现 第5章 Hibernate高级特性 5.1 Hibernate持久化实现 5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 ...

    深入浅出Hibernate(PDF)第二部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出Hibernate

    在附录中讲述了Hibernate常用的映射配置,Hibernate工具、XDoclet模板配置以及Hibernate的益友iBatis用法,还以卡片的形式列出了本书中所用的工具及软件,附录最后一部分是“快速启动代码”,供读者对比与参考,...

    深入浅出Hibernate(PDF)第一部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出Hibernate.pdf

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    Hibernate框架参考文档

    5. 对象/关系数据库映射基础(Basic O/R Mapping); 6. 集合类(Collections)映射; 7. 关联关系映射; 8. 组件(Component)映射; 9. 继承映射(Inheritance Mappings); 10. 与对象共事; 11. 事务和并发; 12. 拦截器与...

    中文 深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出hibernate(PDF)第三部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出Hibernate2

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    \深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    《深入浅出Hibernate》1

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    最全Hibernate 参考文档

    5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. hibernate-mapping 5.1.3. class 5.1.4. id 5.1.4.1. Generator 5.1.4.2. 高/低位算法(Hi/Lo ...

    hibernate中文参考文档

    5、O/R Mapping基础 6、集合类映射 7、组件映射 8、继承映射 9、操作持久化数据 10、事务和并行 11、Hibernate查询语言 12、条件查询 13、原生SQL查询 14、性能提升 15、工具箱指南 16、示例:父子关系 17、示例:...

    Hibernate 3.6.0.Final Reference PDF 手册

    第 5 章 对象/关系数据库映射基础(Basic O/R Mapping) 第 6 章 Types 第 7 章 集合映射(Collection mappings) 第 8 章 关联关系映射 第 9 章 组件(Component)映射 第 10 章 继承映射...

    夏昕.深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了 Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用...

    HibernateAPI中文版.chm

    Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个...

    hibernate3.2中文文档(chm格式)

    Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个...

Global site tag (gtag.js) - Google Analytics