hibernate关联映射

many2one

实例函数

public class Group {

	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

public class User {

	private int id;
	private String name;
	private String password;
	private Group group;

	public Group getGroup() {
		return group;
	}

	public void setGroup(Group group) {
		this.group = group;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

配置文件
Group.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
	<class name="com.zucc.model.Group" table="t_group">
	<id name="id" column="id">
		<generator class="native"/>
	</id>
	<property name="name" column="name" length="20"/>
	</class>
</hibernate-mapping>

User.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
	<class name="com.zucc.model.User" table="user">
	<id name="id" column="id">
		<generator class="native"/>
	</id>
	<property name="name" column="name" length="20"/>
	<property name="password" column="password"/>
	<many-to-one name="group" foreign-key="user_groupID_group_id">
		<column name="group_id"/>
	</many-to-one>
	</class>
</hibernate-mapping>

各属性含义:
<many-to-one  
    name="属性名"   
    column="外键字段名" //可选,默认与name同值。也可以用嵌套的 <column>元素。  
    class="关联的完整类名"//可选,默认是通过反射得到属性类型。  
    entity-name="被关联类的实体名" > //被关联类的实体名 
    lazy="true|false(默认)"  //是否支持Lazy加载,默认为true  
    cascade="none(默认)|all|save-update|delete|delete-orphan"  //级联风格可组合  
        //all : 所有操作都传递到相关联的对象  
        //save-update 保存和更新传递到相关联的对象。假定该配置文件的对象是主体,只有对主体save或者update时,该设置生效。  
        //delete 删除操作传递到相关联的对象 
        //delete-orphan : 所有操作都传递到相关联的对象 并删除不再与父对象关联的对象  
    fetch="join|select(默认)" //  (可选 - 默认为  select ): 在外连接抓取(outer-join fetching)和序列选择抓取(sequential select fetching)两者中选择其一。
  
    update="true(默认)|false"                            
    insert="true(默认)|false"   //同property的udpate、delete,是否更新和删除。  
    property-ref="关联类的属性值" // (可选) 指定关联类的一个属性,作为外键的值。 默认是关联类的主键。   
    not-found="ignore|exception(默认)" // property-ref引用的数据不存在时如何处理: ignore设为null。    
    access="field|property(默认)|ClassName"  //Hibernate用来访问属性的策略。  
    unique="true|false"   //使用DDL为外键字段生成一个唯一约束。此外, 这也可以用作  property-ref的目标属性。这 使关联同时具有 一对一的效果。 
    not-null="true|false" //使用DDL为外键字段生成一个非空约束。  
    optimistic-lock="true(默认)|false" //是否需要获得乐观锁定(optimistic lock),它决定这个属性发生脏数据时版本(version)的值是否增长。   
</many-to-one>  

数据库



one2many单向

实例函数
import java.util.Set;

public class Class {

	private int cid;
	private String name;
	private Set<Student> students;

	public int getCid() {
		return cid;
	}

	public void setCid(int cid) {
		this.cid = cid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Set<Student> getStudents() {
		return students;
	}

	public void setStudents(Set<Student> students) {
		this.students = students;
	}

}

public class Student {

	private int sid;
	private String name;
	private Class class1;

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Class getClass1() {
		return class1;
	}

	public void setClass1(Class class1) {
		this.class1 = class1;
	}

}

配置文件

Student.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping package="com.zucc.model">
	<class name="Student" table="t_student">
	<id name="sid" column="sid">
		<generator class="native"/>
	</id>
	<property name="name" column="name" length="20"/>
	</class>
</hibernate-mapping>

Class.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping package="com.zucc.model">
	<class name="Class" table="t_class">
	<id name="cid" column="cid">
		<generator class="native"/>
	</id>
	<property name="name"/>
	<!-- name:Class中的Set类型的属性名。 order-by:对什么排序,默认为asc升序,desc降序。column:在student表生成一个字段和class表的id相关联。
		 foreign-key:外键名 。class:与Class表一对多相关联的类名。
	-->
	<set name="students" order-by="sid asc">
		<key column="cid" foreign-key="fk_student_cid_class_cid"/>
		<one-to-many class="Student"/>
	</set>
	</class>
</hibernate-mapping>

数据库

one2many双向

实例函数和one2many单向一样

配置文件

Class.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping package="com.zucc.model">
	<class name="Class" table="t_class">
	<id name="cid" column="cid">
		<generator class="native"/>
	</id>
	<property name="name"/>
	<!-- name:Class中的Set类型的属性名。 order-by:对什么排序,默认为asc升序,desc降序。column:在student表生成一个字段和class表的id相关联。
		 foreign-key:外键名 。class:与Class表一对多相关联的类名。
	-->
	<set name="students" order-by="sid asc">
		<key column="cid" foreign-key="fk_student_cid_class_cid"/>
		<one-to-many class="Student"/>
	</set>
	</class>
</hibernate-mapping>

Student.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping package="com.zucc.model">
	<class name="Student" table="t_student">
	<id name="sid" column="sid">
		<generator class="native"/>
	</id>
	<property name="name" column="name" length="20"/>
	<many-to-one name="class1" foreign-key="fk_student_cid_class_cid">
		<column name="cid"/>
	</many-to-one>
	</class>
</hibernate-mapping>

数据库


many2many单向

实例函数

public class User {

	private int id;
	private String name;
	Set<Role> roles;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Set<Role> getRoles() {
		return roles;
	}

	public void setRoles(Set<Role> roles) {
		this.roles = roles;
	}

}

import java.util.Set;

public class Role {

	private int id;
	private String name;
	Set<User> users;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Set<User> getUsers() {
		return users;
	}

	public void setUsers(Set<User> users) {
		this.users = users;
	}

}

配置文件

Role.hbm.xml

<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping package="com.zucc.model">
	<class name="Role" table="t_role">
	<id name="id" column="rid">
		<generator class="native"/>
	</id>
	<property name="name"/>
	</class>
</hibernate-mapping>

User.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping package="com.zucc.model">
	<class name="Role" table="t_role">
	<id name="id" column="rid">
		<generator class="native"/>
	</id>
	<property name="name"/>
	</class>
</hibernate-mapping>

数据库

many2many双向

实例函数和User.hbm.xml和User.hbm.xml与many2many单向一样

Role.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping package="com.zucc.model">
	<class name="Role" table="t_role">
	<id name="id" column="rid">
		<generator class="native"/>
	</id>
	<property name="name"/>
	<set name="users" table="r_user_role">
		<key column="rid" foreign-key="fk_userrole_rid_role_rid"/>
		<many-to-many class="User" foreign-key="fk_userrole_rid_role_rid" column="uid"/>
	</set>
	</class>
</hibernate-mapping>

数据库

one2one单向

实例函数
public class IDCard {

	private int id;
	private String cardNum;
	private User user;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getCardNum() {
		return cardNum;
	}

	public void setCardNum(String cardNum) {
		this.cardNum = cardNum;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}

public class User {

	private int id;
	private String name;
	private IDCard idCard;


	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public IDCard getIdCard() {
		return idCard;
	}

	public void setIdCard(IDCard idCard) {
		this.idCard = idCard;
	}

}

one2one唯一外键

配置文件
IDCard.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
	<class name="com.zucc.model.IDCard" table="t_idcard">
	<id name="id" column="id">
		<generator class="native"/>
	</id>
	<property name="cardNum" column="cardNum"/>
	</class>
</hibernate-mapping>

User.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
	<class name="com.zucc.model.User" table="user">
	<id name="id" column="id">
		<generator class="native"/>
	</id>
	<property name="name" column="name" length="20"/>
	<many-to-one name="idCard" foreign-key="fk_user_idcardid_idcard_id">
		<column name="idcard_id" unique="true"/>
	</many-to-one>
	</class>
</hibernate-mapping>




one2one主键参照

配置文件
IDCard.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
	<class name="com.zucc.model.IDCard" table="t_idcard">
	<id name="id" column="id">
		<generator class="native"/>
	</id>
	<property name="cardNum" column="cardNum"/>
	</class>
</hibernate-mapping>

User.hbm.xml(constrained="true"必须为true)
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
	<class name="com.zucc.model.User" table="user">
	<id name="id" column="id">
		<!-- 主键生成策略:外键的方式 -->
		<generator class="foreign">
		<!-- 指定这个外键参照谁:参照自己的一个叫idcard属性的ID -->
			<param name="property">idCard</param>
		</generator>
	</id>
	<property name="name" column="name" length="20"/>
	<!-- 为引用属性idcard配置映射关系 -->
	<one-to-one name="idCard" foreign-key="fk_user_id_idcard_id" constrained="true"/>
	</class>
</hibernate-mapping>

数据库


one2one双向

实例函数和one2one相同

one2one唯一外键

配置文件
IDCard.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
	<class name="com.zucc.model.IDCard" table="t_idcard">
	<id name="id" column="id">
		<generator class="native"/>
	</id>
	<property name="cardNum" column="cardNum"/>
	<!-- 添加一个one-to-one标签即可,提示Hibernate怎么去加载user,默认根据主键加载
		 property-ref:自己本身在另外一端的属性名
		 <one-to-one name="user"/>不能维护关联关系,所以通过IDCard保存User的关联关系是不成功的
	 	 <one-to-one>标签在保存的时候不能通过该标签配置的属性维护关联关系
	 -->
	<one-to-one name="user" property-ref="idCard"/>
	</class>
</hibernate-mapping>

User.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
	<class name="com.zucc.model.User" table="user">
	<id name="id" column="id">
		<generator class="native"/>
	</id>
	<property name="name" column="name" length="20"/>
	<many-to-one name="idCard" foreign-key="fk_user_idcardid_idcard_id">
		<column name="idcard_id" unique="true"/>
	</many-to-one>
	</class>
</hibernate-mapping>

one2one唯一外键

配置文件
IDCard.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
<span style="white-space:pre">	</span><class name="com.zucc.model.IDCard" table="t_idcard">
<span style="white-space:pre">	</span><id name="id" column="id">
<span style="white-space:pre">		</span><generator class="native"/>
<span style="white-space:pre">	</span></id>
<span style="white-space:pre">	</span><property name="cardNum" column="cardNum"/>
<span style="white-space:pre">	</span><!-- 不能加property-ref属性,因为是主键参照 -->
<span style="white-space:pre">	</span><one-to-one name="user"/>
<span style="white-space:pre">	</span></class>
</hibernate-mapping>

User.hbm.xml
<?xml version="1.0"?>    
<!DOCTYPE hibernate-mapping PUBLIC     
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
    
<hibernate-mapping>
<span style="white-space:pre">	</span><class name="com.zucc.model.User" table="user">
<span style="white-space:pre">	</span><id name="id" column="id">
<span style="white-space:pre">		</span><!-- 主键生成策略:外键的方式 -->
<span style="white-space:pre">		</span><generator class="foreign">
<span style="white-space:pre">		</span><!-- 指定这个外键参照谁:参照自己的一个叫idcard属性的ID -->
<span style="white-space:pre">			</span><param name="property">idCard</param>
<span style="white-space:pre">		</span></generator>
<span style="white-space:pre">	</span></id>
<span style="white-space:pre">	</span><property name="name" column="name" length="20"/>
<span style="white-space:pre">	</span><!-- 为引用属性idcard配置映射关系 -->
<span style="white-space:pre">	</span><one-to-one name="idCard" foreign-key="fk_user_id_idcard_id" constrained="true"/>
<span style="white-space:pre">	</span></class>
</hibernate-mapping>
数据库







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值