知识大全 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之映射继承关系八 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由于关系数
精通Hibernate之映射继承关系(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 把每个
精通Hibernate之映射继承关系(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在域模
精通Hibernate之映射继承关系三 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <h
HibernateORM对象-关系映射 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hiber
精通Hibernate之映射继承关系二(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 把每
精通Hibernate之映射继承关系四(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这种
精通Hibernate之映射继承关系七(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Co
Hibernate如何映射枚举类型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 问题 Jav
Hibernate的基本标签和映射 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! hiberna