知识大全 Hibernate各种映射关系总结

Posted 模型

篇首语:花门楼前见秋草,岂能贫贱相看老。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate各种映射关系总结相关的知识,希望对你有一定的参考价值。

Hibernate各种映射关系总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   多对一

  第一步 建立对象模型

  User

  

  id int

  name String

  group Group

  Group

  

  id:int

  name:String

  第二步 映射文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

  hiber/hibernate mapping dtd >

  <hibernate mapping package= 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>

   一对一映射

   主键映射

   建立对象模型

  Person[id int name String]

  IdCard[id int cardNo int]

   映射文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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>

   主键映射双向

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

   外键关联映射

   对象模型

  Person[id int name String idcard IdCard]

  IdCard[id int cardNo int]

   mapping文件

  Xml代码

  Person xml

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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>

   one to one 外键双向mapping

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

  示意

  Xml代码

  Id card

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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>

   一对多映射

     建立对象模型

  Classes[id int name String student Set]

  Student[id int name String]

     映射文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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(学生)

  改进 采用 一对多双向关联

  Xml代码

  <set name= student  inverse= true >

  <set name= student  inverse= true >

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

   多对多mapping

  单向(采用第三方表)

     对象模型

  Role[id int name String]

  User[id int name String role Set]

   映射文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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>

  双向

   对象模型

  Role[id int name String user Set]

  User[id int name String role Set]

   mapping文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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>

   继承mapping

  第一类继承映射

   对象模型

  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

   mapping 文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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

   对象模型

   mapping 文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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>

   第三类mapping

   对象模型

   mapping 文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= 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>

   Component 映射

  ponent不是实体 没有OID

   对象模型

  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

   mapping文件

  Xml代码

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= nintenyun hibernate >

  <class name= User  table= t_user  >

  <id name= id  >

  <generator class= native />

  </id>

  <property name= name />

  <ponent name= contact >

  <property name= email ></property>

  <property name= address ></property>

  <property name= zipcode ></property>

  <property name= contactTel ></property>

  </ponent>

  </class>

  </hibernate mapping>

   复合主键mapping

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

  这个类必须实现 Serializable接口

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

  XML

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD  //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping package= nintenyun hibernate >

  <class name= SC  table= t_sc  >

  <posite id name= scpk >

  <key property name= sno />

  <key property name= cno />

  </posite id>

  <property name= sname ></property>

  <property name= cname ></property>

  </class>

cha138/Article/program/Java/ky/201311/28675

相关参考

知识大全 精通Hibernate之映射继承关系八

精通Hibernate之映射继承关系八  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由于关系数

知识大全 精通Hibernate之映射继承关系(二)

精通Hibernate之映射继承关系(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  把每个

知识大全 精通Hibernate之映射继承关系(一)

精通Hibernate之映射继承关系(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在域模

知识大全 精通Hibernate之映射继承关系三

精通Hibernate之映射继承关系三  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  <h

知识大全 Hibernate ORM 对象-关系 映射

HibernateORM对象-关系映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hiber

知识大全 精通Hibernate之映射继承关系二(图)

精通Hibernate之映射继承关系二(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  把每

知识大全 精通Hibernate之映射继承关系四(图)

精通Hibernate之映射继承关系四(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这种

知识大全 精通Hibernate之映射继承关系七(图)

精通Hibernate之映射继承关系七(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Co

知识大全 Hibernate如何映射枚举类型

Hibernate如何映射枚举类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问题  Jav

知识大全 Hibernate的基本标签和映射

Hibernate的基本标签和映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  hiberna