`
nintenyun
  • 浏览: 26938 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate各种映射关系总结

阅读更多

Hibernate各种映射关系总结。



1 多对一

第一步 :建立对象模型

User                                            

-----------------------------

id:int

name:String

group:Group

Group

------------------------------

id:int

name:String

 

 

第二步:映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="User" table="t_user">
      <id name="id" column="id">
        <generator class="identity"/>
      </id>
      <property name="name" column="User_name" unique="true"/>
      <many-to-one name="group" column="groupid"/>
   </class>
</hibernate-mapping>
 

 

2 一对一映射

2.1 主键映射

 

1. 建立对象模型

 

Person[id-int,name-String]

IdCard[id-int,cardNo-int]

 

2. 映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Person" table="t_person">
      <id name="id">
        <generator class="foreign">
        <param name="property">idCard</param>
        </generator>
      </id>
      <property name="name" column="Person_name" />
      <one-to-one name="idCard" constrained="true"/>
   </class>
</hibernate-mapping>
 

2.2 主键映射双向

只需要在IdCard 的XML中添加<one-to-one>标签指向person,就可以告诉Hibernate如何加载person,默认按照主键加载

 

2.3 外键关联映射

 

1. 对象模型

 

Person[id-int,name-String,idcard-IdCard]

IdCard[id-int,cardNo-int]

 

2 mapping文件

 

Person.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Person" table="t_person">
      <id name="id">
        <generator class="identity">
        </generator>
      </id>
      <property name="name" column="Person_name" />
      <many-to-one name="idCard" unique="true"></many-to-one>
   </class>
</hibernate-mapping>
 

2.4 one-to-one 外键双向mapping

 

只需要在另一端(IdCard)加入<one-to-one>标签,但是hibernate默认按照主键加载,所以要告诉hibernate按照指定列来加载

示意:

 

Id-card
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="IdCard" table="t_idcard">
      <id name="id" column="id">
        <generator class="identity"/>
      </id>
      <property name="cardNo" column="cardno" />
      <one-to-one name="person" property-ref






="idCard"></one-to-one>
   </class>
</hibernate-mapping>
 

3 一对多映射

 

1  建立对象模型

 

Classes[id-int,name-String,student-Set]

Student[id-int,name-String]

 

2  映射文件

 

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Class" table="t_class">
      <id name="id">
        <generator class="native"/>
      </id>
      <property name="name" />
      <set name="student" >
      <key column="classid" />
      <one-to-many class="Student"/>
      </set>
   </class>
</hibernate-mapping>
 

缺点:若将Student的classid设置为非空,将无法保存。应为不是student这一端维护关系,所以student不知道是哪个班级,所以需要发出多余的update语句来更新关系。

(一对多): 先要session.sava(学生),再sessio.save(班级)

(多对一): 先要session.sava(班级),再sessio.save(学生)

 

改进 采用 一对多双向关联

   <set name="student" inverse="true">
 

这样的好处是 存入数据让多的一端进行维护,不需要发出多余的update.

 

 

4 多对多mapping

单向(采用第三方表)

1  对象模型

Role[id-int,name-String]

User[id-int,name-String,role-Set]

 

2映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="User" table="t_user">
      <id name="id">
        <generator class="native"/>
      </id>
      <property name="name" />
      <set name="role" table="t_user_role">
      <key column="userid"></key>
      <many-to-many class="Role" column="roleid" />
      </set>
   </class>
</hibernate-mapping>

 

双向:

1 对象模型:

Role[id-int,name-String,user-Set]

User[id-int,name-String,role-Set]

 

2 mapping文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Role" table="t_role">
      <id name="id">
        <generator class="native"/>
      </id>
      <property name="name" />
      <set name="user" table="t_user_role">
      <key column="userid"></key>
      <many-to-many class="User" column="userid" />
      </set>
   </class>
</hibernate-mapping>

 

 

 

5 继承mapping

 

第一类继承映射

 

 

 

1 对象模型

 

Animal
private int id
private String name
private Boolean sex

--------------------------------------------------

public class Bird extends Animal
private int height

--------------------------------------------------

public class Pig extends Animal
private int weight

 

 

 

2 mapping 文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Animal" table="t_animal" >
      <id name="id" >
        <generator class="native"/>
      </id>
      <discriminator column="type" type="string"></discriminator>
      <property name="name"/>
      <property name="sex"/>
      <subclass name="Pig" discriminator-value="P">
      	<property name="weight"/>
      </subclass>
      <subclass name="Bird" discriminator-value="B">
      	<property name="height"/>
      </subclass>
   </class>
  

   
</hibernate-mapping>
 

第二类mapping

 

1 对象模型

 

2 mapping 文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Animal" table="t_animal" >
      <id name="id" >
        <generator class="native"/>
      </id>
     <property name="name"/>
     <property name="sex"/>
        <joined-subclass name="Pig" table="t_pig">
        	<key column="pid"/>
        	<property name="weight"/>
        </joined-subclass>
        <joined-subclass name="Bird" table="t_bird">
        	<key column="bid"/>
        	<property name="height"/>
        </joined-subclass>
</class> 
</hibernate-mapping>
 

 

3 第三类mapping

1对象模型

2 mapping 文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Animal" table="t_animal" >
      <id name="id" >
        <generator class="native"/>
      </id>
     <property name="name"/>
     <property name="sex"/>
     <union-subclass name="Pig" table="t_pig">
     <property name="weight"/>
     </union-subclass>
     <union-subclass name="Bird" table="t_bird">
     <property name="height"/>
     </union-subclass>
</class>
</hibernate-mapping>
 

 

6 Component 映射

 

component不是实体,没有OID。

 

1 对象模型

 

public class Employee
private int id

private String name
private Contact contact

-------------------------------------

public class Contact 

private String email
private String address
private String zipcode
private String contactTel

-------------------------------------

public class User 

private int id
private String name
private Contact contact

 

 

2 mapping文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="User" table="t_user" >
      <id name="id" >
        <generator class="native"/>
      </id>
      <property name="name"/>
      <component name="contact">
      <property name="email"></property>
      <property name="address"></property>
      <property name="zipcode"></property>
      <property name="contactTel"></property>
   	  </component>
   </class>
 </hibernate-mapping>
 

 

7 复合主键mapping

 

通常将复合主键相关属性,单独放到一个类中

这个类必须实现 Serializable接口

这个类必须重写hashCode()和equals()方法

 

XML

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="SC" table="t_sc" >
   		<composite-id name="scpk">
    		<key-property name="sno"/>
    		<key-property name="cno"/>
    	</composite-id>  
    	<property name="sname"></property>
    	<property name="cname"></property>
   </class>
</hibernate-mapping>
 

 

3
0
分享到:
评论

相关推荐

    hibernate表的映射关系总结

    hibernate表映射一直记不住,这次总结一下,放便下次使用。。。

    hibernate映射关系总结

    hibernate开发的关系: one-to-one,many-to-one,many-to-many学习经验总结

    Hibernate映射关联关系总结

    对Hibernate映射关系详细总结,可以帮助你学习Hibernate知识

    hibernate关联关系总结

    Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...

    hibernate技术研究对比总结

    Hibernate 是一个流行的 Java 应用程序框架,它提供了一种对象关系映射(ORM)解决方案,将数据库操作转化为面向对象的编程。此文档旨在研究和对比 Hibernate 技术的不同方面,帮助开发者更好地理解和利用其功能。 ...

    Hibernate关系映射

    总结来说,"多对一"关系映射是Hibernate的重要特性,理解和熟练掌握其配置和应用,能有效提升Java web开发的效率和质量。通过SSH框架的整合,我们可以更好地实现业务逻辑,创建出稳定、高效的web系统。

    Hibernate映射配置实例大全(详细总结)

    "Hibernate映射配置实例大全"是一个全面深入的资源,旨在帮助开发者理解和掌握如何有效地配置Hibernate以实现对象关系映射(ORM)。在这个文档中,我们将探讨各种关键的映射配置方法,以及相关的实例。 首先,我们...

    Hibernate各种表关系映射配置详解

    总结来说,Hibernate通过配置文件和映射元数据实现了Java对象与数据库表之间的关系映射。理解和熟练掌握这些映射方式,对于高效地使用Hibernate进行数据库操作至关重要。在实际项目中,根据业务需求灵活运用这些映射...

    hibernate关系映射网址

    ### Hibernate关系映射详解 #### 一、引言 Hibernate是一种广泛使用的Java持久化框架,它简化了对象关系映射(Object-Relational Mapping,简称ORM)的过程,使得开发人员可以更加专注于业务逻辑的实现而无需过多...

    Hibernate_关联关系映射配置

    在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库操作。本教程将详细讲解Hibernate中的关联关系映射配置,帮助你理解和掌握如何...

    Hibernate知识点总结

    ### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...

    Hibernate_实体关联关系映射--学习总结

    ###Hibernate实体关联关系映射知识总结 #### 映射关系的类型 1. **一对一关联**: - **一对一外键关联**:一个实体的外键指向另一个实体的主键。 - **一对一主键关联**:两个实体共享同一个主键。 - **一对一...

    hibernate 映射关系学习入门 多对多实体映射

    本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...

    hibernate实体关联关系映射

    Hibernate的实体关联关系映射为开发者提供了丰富的工具来处理各种复杂的关联关系。在实际开发过程中,开发者可以根据具体需求选择合适的映射方式。需要注意的是,在设计关联关系时,应充分考虑到数据完整性和性能的...

    hibernate的关系映射

    **标题:“Hibernate的关系映射”** 在Java编程领域,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表之间的交互转化为简单的API调用。关系映射是Hibernate的核心特性之...

    Hibernate映射关系配置:XML方式和注解方式

    标题“Hibernate映射关系配置:XML方式和注解方式”涉及到的是Java持久层框架Hibernate中的一个重要概念——对象关系映射(ORM)。在这个主题中,我们将探讨如何通过XML映射文件和注解来配置Hibernate实体之间的关系...

Global site tag (gtag.js) - Google Analytics