`
explore
  • 浏览: 78423 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate 各种映射用法

    博客分类:
  • J2EE
阅读更多

1. 值集合映射:这些集合包含的元素不是Domain Object,是一些值对象

  1.1 Set映射:
        <set name="Set属性名" table="表名">
            <key column="与主键关联字段名" />
            <element type="数据类型" column="字段名" />
        </set>
  1.2 List映射:
        <list name="List属性名" table="表名">
            <key column="与主键关联字段名" />
            <list-index column="索引字段名" />
            <element type="数据类型" column="字段名" />
        </list>
  1.3Map映射:
        <map name="Map属性名" table="表名">
            <key column="与主键关联字段名" />
            <map-key type="数据类型" column="KEY字段名" />
            <element type="数据类型" column="VALUE字段名" />
        </map>

  1.4 Bag映射:
        <bag name="bag属性名" table="表名">
            <key column="与主键关联字段名" />        
            <element type="数据类型" column="字段名" />
        </bag>
  1.5 Idbag映射:
        <idbag name="idbag 属性名" table="表名"> 

            <collection-id column="cid" type="java.lang.String">

                    <generator class="uuid.hex" />

             </collection-id>

            <key column="与主键关联字段名" />
            <element type="数据类型" column="字段名" />
        </idbag>

Bag和Set一样是无序集合,和Set不同的是,Bag允许元素重复,可以将List映射为Bag。

Bag与IdBag的区别:

public class User {
      private List<String> emails=new ArrayList<String>();

      public void addEmail(String email) {   
           emails.add(email);    
      }         

      public void removeEmail(String email) {      
            emails.remove(email);   
     }

CREATE TABLE user (
    id INT(11) NOT NULL auto_increment PRIMARY KEY
);

CREATE TABLE emails(
    userId INT(11) NOT NULL,
    email  VARCHAR(100) NOT NULL
);

<bag name="emails" table="emails">    
        <key column="userId" />    
        <element column="email" type="java.lang.String" />    
 </bag> 

<idbag name="emails" table="emails">     
    <collection-id column="cid" type="java.lang.String">                   
          <generator class="uuid.hex" />       
   </collection-id>        
   <key column="email" />
   <element column="email" type="java.lang.String" />    
</idbag>

User user1=new User();
user1.addEmail("email1@139.com");
user1.addEmail("email2@139.com");
user1.addEmail("email2@139.com");

User user2=new User();
user2.addEmail("email3@139.com");

//save user

//user table
      id
      1
      2

 

 如果采用bag,则emails表如下:

userid         email
    1             email1
    1             email2
    1             email2
    2             email3

执行user1.remove(email2),根据List的remove方法,会删除第一个匹配的元素,但是Hibernate无法定位此元素,因而采取的方式为先全部清空,再重新插入数据库,效率低下,生成的sql意思如下:

delete from emails where userId=1;

insert into emails(userId,email) values(1,email1);

insert into emails(userId,email) values(1,email2);

insert into emails(userId,email) values(2,email3);

 

如果采用Idbag,则emails表如下:

 cid         userid         email
 cid1          1             email1
 cid2          1             email2
 cid3          1             email2
 cid4          2             email3

执行user1.remove(email2),生成的sql意思如下:

delete from emails where cid=cid2;

此方式效率较高。

 

2. 实体关系映射

 <many-to-one name="company" column="companyid" class="com.ijo.domain.user.Company">

 

  <set name="subProjects" table="subproject_programmer"  inverse="true">
        <key column="programmerid"/>
        <many-to-many class="com.ijo.domain.project.SubProject" column="subprojectid"/>
  </set>


  <bag name="subscriptions" table="subscription" >
         <key column="companyid"/>
         <one-to-many class="com.ijo.domain.subscription.Subscription"/>
   </bag>

 3. 继承关系映射

3.1 <subclass name="com.ijo.domain.common.category.AdjustCategory" discriminator -  

           value="AdjustCategory">
      </subclass>
      <subclass name="com.ijo.domain.common.category.TransportCategory" discriminator- 

            value="TransportCategory">
      </subclass>

 

3.2 <joined-subclass name="com.ijo.domain.user.CustomerUser" table="customeruser">
            <key column="userid"/>
       </joined-subclass>

 



 

 

分享到:
评论

相关推荐

    Hibernate关联映射总结

    关于对Hibernate关联映射的一个总结,其中有各种映射的例子,详细用法 等

    hibernate的约束文件(核心配置,映射文件)

    此压缩包内有两文件,一个是hibernate的核心配置文件hibernate.cfg.xml,一个是实体映射文件*.hbm.xml,在配置hibernate文件时需要用到头部的约束,还有在配置没提示时需要用到(附带使用方法)。

    使用Hibernate逆向生成实体类的方法(注解和hbm.xml映射文件)

    主要介绍通过Hibernate不用别的插件,逆向生成实体类的方法,包括标签注解映射和hbm.xml文件映射两种

    hibernate自动生成关键映射以及工厂类,连接数据库

    hibernate自动生成关键映射以及工厂类,连接数据库弄好连接和设置hibernate关键映射了,这些都不用头疼了。直接使用HibernateSessionFactory 工厂类调用方法测试就好了,方便简洁,还能提高编码效率。 本人亲自测试...

    Hibernate注解 关联关系映射注解.docx

    mappedBy属性用法:  该属性与关联关系的维护权相关。  该属性应放在放弃维护权一方。  该属性值为对方的关联属性,表明以后的关联关系将由它来负责。  使用该属性的注解,无需也不能再设置cascade属性。 ...

    Hibernate_Annotation关联映射

    Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...

    关联映射hibernate的criteria的用法

    通过该源代码可以详细的了解hibernate的criteria的用法,有助于快速的帮助初学者建立hibernate中面向对象的查询,

    hibernate基础实验

    (1) Hibernate是一个面向Java环境的对象/关系数据库映射工具,Hibernate不仅管理Java类型到数据库表的映射,还提供查询数据和操作数据的OO方法。 (2) Hibernate对JDBC进行了轻量级的对象封装,使Java程序员可以...

    hibernate中的集合映射范例程序

    hibernate中的集合映射,各种集合类型的使用方法及适用场景

    hibernate一对多关联映射

    主要介绍了hibernate一对多(多对一)双向关联映射的用法

    hibernate-prj1

    2、Hibernate 的主要作用是简化应用的数据持久层编程,不仅能管理 Java 类到数 据库表的映射,还提供数据查询和获取数据的方法,从而大幅减少了开发人 员编写 SQL 和 JDBC 代码的时间; 3、Hibernate 框架主要包括...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    Hibernate3.1_学习源码

    其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建成一个实体,这样在编程时更加直观。 05 05Hibernate_EntityLayerDesign : 实体层的设计,演示两种情况: 1) 数据库表:一张...

    Java的Hibernate框架中的基本映射用法讲解

    映射是Hibernate框架操作数据库数据的重要特性之一,这里我们来看一下Java的Hibernate框架中的基本映射用法讲解,包括最基本的单向一对一与多对一映射关系等:

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

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

    Hibernate 3.2.0中文离线手册

    Hibernate是一个面向Java环境的对象...Hibernate不仅仅管理Java类到数据库表的映射(包括Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。

    深入浅出Hibernate中文版 part1

    第7章 常用Hibernate映射配置说明 7.1 hibernate-mapping节点 7.2 class节点定义 7.3 id节点定义 7.4 属性/字段映射配置 第8章 Hibernate工具 8.1 准备工作 8.2 根据数据库定义生成映射文件——MiddleGen ...

    深入浅出Hibernate.pdf

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

    hibernate一对多关联映射(单向关联)

    博文链接:https://llying.iteye.com/blog/220809

    Hibernate+中文文档

    9.1.7. 隐式多态和其他继承映射混合使用 9.2. 限制 10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. ...

Global site tag (gtag.js) - Google Analytics