Hibernate关联关系

目录

一对一:

一对多 :数据库表结构:

   1.实体类的部署:

    2.hbm.xml配置

多对多:

数据库结构

 1.实体类部署:

2.hbm.xml配置


                  关联关系在orm框架中是一个比较重要的一部分,在学习Hibernate框架的朋友可以重点的关注一下。

  关联关系通俗一点来说就是数据库表与表之间的关系(主外键关系),hibernare框架弱化了数据库表的一些操作,强化了实体类的操作,在hibernate中操作实体类就等同于操作数据库表。

  关联关系分为三种:一对一、一对多、多对多

 

 

一对一:<one-to-one name=""></one-to-one>

一对一的关系配置有几种,这里我们配比较常用的一种

<!--由于在申明主键的时候已经将关系写清楚了,所以在这里没有column这个属性。按平常的习惯,我们会在这里写上column="数据库中外键字段属性名称。"-->
     <!--constrained属性:就是表明主键当外键使用了。这个属性两个作用,一是通知这种对应关系在上面已经写过了,所以这里才不需要写column,二是表明这种关系是主键当外键。
      其实还有一个级联关系的作用-->
        <one-to-one name="idCard" constrained="true"></one-to-one>

 

 

一对多 :<many-to-one name=""></many-to-one>
数据库表结构:

--  用户表
CREATE TABLE tb_testUser(
puid VARCHAR(35) PRIMARY KEY,
tname VARCHAR(20) NOT NULL,
sex int DEFAULT 1 -- 1(男),2(女)
);


-- 用户文章表
CREATE TABLE tb_article(
aid VARCHAR(35) PRIMARY KEY,
fuid VARCHAR(35) not NULL,
content VARCHAR(300)

);


   1.实体类的部署:

一端实体类

package xyz.askway.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;


/**xyz.askway.pojo(package)
 *Name:一端实体类
 *Function:持久化(CRUD)
 *WANGLiMiN
 *2018-08-07 11:15:14
 */
public class Y implements Serializable {

	/**
	 * Function:
	 * Analysis:
	 * WANGLiMiN
	 *2018-08-07 11:15:14
	 */
	private static final long serialVersionUID = 1L;

	private String puidl;  
	private String unamel;  
	private Integer sexl; 
	private Set<D> dSetl = new HashSet<D>(); //多端集合
	
	public Y(String puidl, String unamel, Integer sexl, Set<D> dSetl) {
		this.puidl = puidl;
		this.unamel = unamel;
		this.sexl = sexl;
		this.dSetl = dSetl;
	}

	public Y() {
	}

	public String getPuidl() {
		return puidl;
	}

	public void setPuidl(String puidl) {
		this.puidl = puidl;
	}

	public String getUnamel() {
		return unamel;
	}

	public void setUnamel(String unamel) {
		this.unamel = unamel;
	}

	public Integer getSexl() {
		return sexl;
	}

	public void setSexl(Integer sexl) {
		this.sexl = sexl;
	}

	public Set<D> getdSetl() {
		return dSetl;
	}

	public void setdSetl(Set<D> dSetl) {
		this.dSetl = dSetl;
	}

	@Override
	public String toString() {
		return "Y [puidl=" + puidl + ", unamel=" + unamel + ", sexl=" + sexl + ", dSetl=" + dSetl + "]";
	}
	

}

多端实体类

package xyz.askway.pojo;

import java.io.Serializable;

/**xyz.askway.pojo(package)
 *Name:多端实体类
 *Function:
 * @author WANGLiMiN
 */
public class D implements Serializable{
	
	/**Function:
	 * Analysis:
	 * @author WANGLiMiN
	 */
	private static final long serialVersionUID = 1L;
	
	private String aidv ;
	private String contentv;
	private Y y; //一端对象

	public D(String aidv,  String contentv, Y y) {
		this.aidv = aidv;
		this.contentv = contentv;
		this.y = y;
	}

	public D() {
	
	}

	public String getAidv() {
		return aidv;
	}

	public void setAidv(String aidv) {
		this.aidv = aidv;
	}

	

	public String getContentv() {
		return contentv;
	}

	public void setContentv(String contentv) {
		this.contentv = contentv;
	}

	public Y getY() {
		return y;
	}

	public void setY(Y y) {
		this.y = y;
	}

	

	
	
	
	

}

2.hbm.xml配置

一端hbm.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">
<!-- Generated 2018-8-25 14:36:24 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="xyz.askway.pojo.Y" table="tb_testUser">
    
        <id name="puidl" column="puid">
            <generator class="assigned" />
        </id>
        
        <property name="unamel" column="tname"/>
       
        <property name="sexl" column="sex"/>
        
        <!-- name放多端集合名,table放多端的表名,cascade表示级联操作 -->
        <set name="dSetl" table="tb_article" cascade="save-update">
            <key>
                <!-- column放多端表的外键字段名 -->
                <column name="fuid" />
            </key>
            <!-- class放多端类的全路径名 -->
            <one-to-many class="xyz.askway.pojo.D" />
        </set>
    </class>
</hibernate-mapping>

多端hbm.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">
<!-- Generated 2018-8-25 14:36:24 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="xyz.askway.pojo.D" table="tb_article">
        <id name="aidv" column="aid" >
            <generator class="assigned" />
        </id>
        <property name="contentv" column="content" />
        
        <!-- name放一端的对象属性名,class放一端类的全路径名 -->
        <many-to-one name="y" class="xyz.askway.pojo.Y">
          <!-- column放tb_article(本表的外键字段名) -->
            <column name="fuid" />
        </many-to-one>
        
    </class>
</hibernate-mapping>

多对多:<many-to-many name=""></many-to-many>

多对多主要操作的是关系表,操作关系集合就是操作关系表。

删除关系表中的一条数据:移除关系集合的一个关系对象就可以了,(添加也是同理的操作)。

数据库结构

-- 1.tb_st_area 抄表辖区
CREATE TABLE tb_st_area(
	id_sy_area VARCHAR(37) PRIMARY KEY, -- ID主键 UUID()
	_area_name VARCHAR(50),             -- 抄表辖区名称
	_remark	VARCHAR(200),                -- 备注
	_disabled	INT DEFAULT 0              -- 禁用 (0可使用 1已禁用)
);

-- 2.SY_Emp 员工
CREATE TABLE tb_sy_emp(
	id_sy_emp	VARCHAR(37) PRIMARY KEY, -- 主键,UUID()
	emp_name	varchar(50),         -- 员工姓名
	emp_no	varchar(10),           -- 工号
	_pwd	varchar(20),	           -- 密码 (MD5加密)
	dept_id	int,	                 -- 部门ID
	_remark	varchar(200),	         -- 备注
	_disabled	INT DEFAULT 0      	 -- 禁用 (0可使用 1已禁用)
);

-- 员工抄表辖区关系表
CREATE TABLE tb_sy_emp_area_power(
	id_sy_emp_area_power VARCHAR(37) PRIMARY KEY, -- 主键,UUID()
	emp_id	int,   -- 员工ID
	area_id	int	   -- 抄表辖区ID
);

 1.实体类部署:

员工实体类

package com.waterworks.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;

import com.waterworks.util.MD5;
import com.waterworks.util.MenuComparator;

/**
 * @ClassName:tb_sy_emp 
 * @Description: TODO(类说明:员工 )
 * @author  
 * @date 2018-08-23 20:22:49
 */ 
public class SyEmp implements Serializable{
	private static final long serialVersionUID = 1L;
	private String idSyEmp; 	//主键,UUID()
	private String empName; 	//员工姓名
	private String empNo; 	//工号
	private String pwd; 	//密码 (MD5加密)
	private String remark; 	//备注
	private Integer disabled=0; 	//禁用 (0可使用 1已禁用)
	private Integer deptId; //部门ID
	private SyDept dept;  //部门对象



	private Set<StArea> areaSet = new HashSet<StArea>();//抄表辖区
	




	
	/**
	 * @Description: TODO(无参构造方法) 
	 */ 
	public SyEmp(){
	}
	/**
	 * @Description: TODO(有参构造方法) 
	 * @param idSyEmp	主键,UUID()
	 * @param empName	员工姓名
	 * @param empNo	工号
	 * @param pwd	密码 (MD5加密)
	 * @param deptId	部门ID
	 * @param remark	备注
	 * @param disabled	禁用 (0可使用 1已禁用)
	 */ 
	public SyEmp(String idSyEmp,String empName,String empNo,String pwd,String remark,Integer disabled){
		this.idSyEmp=idSyEmp;
		this.empName=empName;
		this.empNo=empNo;
		this.pwd=pwd;
		this.remark=remark;
		this.disabled=disabled;
	}
	

	/**
	 * @return the beComment
	 */
	public Set<BeComment> getBeComment() {
		return beComment;
	}
	/**
	 * @param beComment the beComment to set
	 */
	public void setBeComment(Set<BeComment> beComment) {
		this.beComment = beComment;
	}
	/**
	 * @Title:setIdSyEmp 
	 * @Description: TODO(设置IdSyEmp	主键,UUID())
	 * @param idSyEmp
	 */ 
	public void setIdSyEmp(String idSyEmp){
		this.idSyEmp=idSyEmp;
	}
	/**
	 * @Title:setIdSyEmp 
	 * @Description: TODO(得到IdSyEmp	主键,UUID())
	 * @return String
	 */ 
	public String getIdSyEmp(){
		return idSyEmp;
	}
	/**
	 * @Title:setEmpName 
	 * @Description: TODO(设置EmpName	员工姓名)
	 * @param empName
	 */ 
	public void setEmpName(String empName){
		this.empName=empName;
	}
	/**
	 * @Title:setEmpName 
	 * @Description: TODO(得到EmpName	员工姓名)
	 * @return String
	 */ 
	public String getEmpName(){
		return empName;
	}
	/**
	 * @Title:setEmpNo 
	 * @Description: TODO(设置EmpNo	工号)
	 * @param empNo
	 */ 
	public void setEmpNo(String empNo){
		this.empNo=empNo;
	}
	/**
	 * @Title:setEmpNo 
	 * @Description: TODO(得到EmpNo	工号)
	 * @return String
	 */ 
	public String getEmpNo(){
		return empNo;
	}
	/**
	 * @Title:setPwd 
	 * @Description: TODO(设置Pwd	密码 (MD5加密))
	 * @param pwd
	 */ 
	public void setPwd(String pwd){
		this.pwd=pwd;
	}
	/**
	 * @Title:setPwd 
	 * @Description: TODO(得到Pwd	密码 (MD5加密))
	 * @return String
	 */ 
	public String getPwd(){
		return pwd;
	}


	/**
	 * @Title:setRemark 
	 * @Description: TODO(设置Remark	备注)
	 * @param remark
	 */ 
	public void setRemark(String remark){
		this.remark=remark;
	}
	/**
	 * @Title:setRemark 
	 * @Description: TODO(得到Remark	备注)
	 * @return String
	 */ 
	public String getRemark(){
		return remark;
	}
	/**
	 * @Title:setDisabled 
	 * @Description: TODO(设置Disabled	禁用 (0可使用 1已禁用))
	 * @param disabled
	 */ 
	public void setDisabled(Integer disabled){
		this.disabled=disabled;
	}
	/**
	 * @Title:setDisabled 
	 * @Description: TODO(得到Disabled	禁用 (0可使用 1已禁用))
	 * @return Integer
	 */ 
	public Integer getDisabled(){
		return disabled;
	}
	
	/**Function:得到部门对象
	 * Analysis:
	 * @return the dept
	 * @author WANGLiMiN
	 */
	public SyDept getDept() {
		return dept;
	}
	/**Function:设置部门对象
	 * Analysis:
	 * @param dept the dept to set
	 * @author WANGLiMiN
	 */
	public void setDept(SyDept dept) {
		this.dept = dept;
	}
	/**Function:
	 * Analysis:
	 * @return the deptId
	 * @author WANGLiMiN
	 */
	public Integer getDeptId() {
		return deptId;
	}
	/**Function:
	 * Analysis:
	 * @param deptId the deptId to set
	 * @author WANGLiMiN
	 */
	public void setDeptId(Integer deptId) {
		this.deptId = deptId;
	}

	/**
	 * Function:初始化Emp对象
	 * Analysis:
	 * @author WANGLiMiN
	 */
	public SyEmp initEmp() {
		this.setIdSyEmp(UUID.randomUUID()+"");
		this.setPwd(MD5.getMD5ofStr(this.getPwd()));
		return this;
	}

	/* (非 Javadoc) 
	* <p>Title: toString</p> 
	* <p>Description: </p> 
	* @return 
	* @see java.lang.Object#toString() 
	*/
	@Override
	public String toString() {
		return "SyEmp [idSyEmp=" + idSyEmp + ", empName=" + empName + ", empNo=" + empNo + ", pwd=" + pwd + ", remark="
				+ remark + ", disabled=" + disabled + ", deptId=" + deptId + "]";
	}

	/**Function:
	 * Analysis:
	 * @return the areaSet
	 * @author WANGLiMiN
	 */
	public Set<StArea> getAreaSet() {
		return areaSet;
	}
	/**Function:
	 * Analysis:
	 * @param areaSet the areaSet to set
	 * @author WANGLiMiN
	 */
	public void setAreaSet(Set<StArea> areaSet) {
		this.areaSet = areaSet;
	}
	

	

}

抄表辖区实体类

package com.waterworks.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * @ClassName:tb_st_area 
 * @Description: TODO(类说明:抄表辖区 )
 * @author  
 * @date 2018-08-23 20:22:49
 */ 
public class StArea implements Serializable{
	private static final long serialVersionUID = 1L;
	private Integer idSyArea; 	//ID主键 
	private String areaName; 	//抄表辖区名称
	private String remark; 	//备注
	private Integer disabled=0; 	//禁用 (0可使用 1已禁用
	private String checkbox="";
	private Set<SyEmp> empSet = new HashSet<SyEmp>();//员工
	
	/**
	 * @Description: TODO(无参构造方法) 
	 */ 
	public StArea(){
	}
	/**
	 * @Description: TODO(有参构造方法) 
	 * @param idSyArea	ID主键 
	 * @param areaName	抄表辖区名称
	 * @param remark	备注
	 * @param disabled	禁用 (0可使用 1已禁用
	 */ 
	public StArea(Integer idSyArea,String areaName,String remark,Integer disabled){
		this.idSyArea=idSyArea;
		this.areaName=areaName;
		this.remark=remark;
		this.disabled=disabled;
	}
	/**
	 * @Title:setIdSyArea 
	 * @Description: TODO(设置IdSyArea	ID主键 )
	 * @param idSyArea
	 */ 
	public void setIdSyArea(Integer idSyArea){
		this.idSyArea=idSyArea;
	}
	/**
	 * @Title:setIdSyArea 
	 * @Description: TODO(得到IdSyArea	ID主键 )
	 * @return Integer
	 */ 
	public Integer getIdSyArea(){
		return idSyArea;
	}
	/**
	 * @Title:setAreaName 
	 * @Description: TODO(设置AreaName	抄表辖区名称)
	 * @param areaName
	 */ 
	public void setAreaName(String areaName){
		this.areaName=areaName;
	}
	/**
	 * @Title:setAreaName 
	 * @Description: TODO(得到AreaName	抄表辖区名称)
	 * @return String
	 */ 
	public String getAreaName(){
		return areaName;
	}
	/**
	 * @Title:setRemark 
	 * @Description: TODO(设置Remark	备注)
	 * @param remark
	 */ 
	public void setRemark(String remark){
		this.remark=remark;
	}
	/**
	 * @Title:setRemark 
	 * @Description: TODO(得到Remark	备注)
	 * @return String
	 */ 
	public String getRemark(){
		return remark;
	}
	/**
	 * @Title:setDisabled 
	 * @Description: TODO(设置Disabled	禁用 (0可使用 1已禁用)
	 * @param disabled
	 */ 
	public void setDisabled(Integer disabled){
		this.disabled=disabled;
	}
	/**
	 * @Title:setDisabled 
	 * @Description: TODO(得到Disabled	禁用 (0可使用 1已禁用)
	 * @return Integer
	 */ 
	public Integer getDisabled(){
		return disabled;
	}
	/**
	 * @Title:toString 
	 * @Description: TODO(toString)
	 */ 
	public String toString() { 
		return "StArea[idSyArea=" + idSyArea + ",areaName=" + areaName + ",remark=" + remark + ","+
		"disabled=" + disabled + "]";
	}
	/**Function:
	 * Analysis:
	 * @return the empSet
	 * @author WANGLiMiN
	 */
	public Set<SyEmp> getEmpSet() {
		return empSet;
	}
	/**Function:
	 * Analysis:
	 * @param empSet the empSet to set
	 * @author WANGLiMiN
	 */
	public void setEmpSet(Set<SyEmp> empSet) {
		this.empSet = empSet;
	}
	/**Function:
	 * Analysis:
	 * @return the checkbox
	 * @author WANGLiMiN
	 */
	public String getCheckbox() {
		return checkbox;
	}
	/**Function:
	 * Analysis:
	 * @param checkbox the checkbox to set
	 * @author WANGLiMiN
	 */
	public void setCheckbox(String checkbox) {
		this.checkbox = checkbox;
	}
	
	
	
}

2.hbm.xml配置

员工hbm.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">
<!-- Generated 2018-8-25 10:06:54 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping package="com.waterworks.pojo" >
    <class name="SyEmp" table="tb_sy_emp" lazy="false">
        <id name="idSyEmp" column="id_sy_emp">
            <generator class="assigned" />
        </id>

        <property name="empName" column="emp_name"/>
        
        <property name="empNo" column="emp_no"/>
        
        <property name="pwd" column="_pwd"/>
        
        <property name="remark" column="_remark"/>
        
        <property name="disabled" column="_disabled"/>
        


         <!-- 员工-抄表辖区权限表(多对多) -->
         <!-- name放对象集合名,table放关系表名,inverse维护关系(true:放弃维护权限,false:不放弃维护权限)cascade="none"(不进行级联操作) -->
        <set name="areaSet" table="tb_sy_emp_area_power" inverse="false" cascade="none" lazy="false">
            <!-- column放关系表中与本表有关系的外键字段名 -->
            <key column="emp_id"></key>
            <!-- class放另外一张表的实体类全路径名, column放关系表中与另外一张表有关系的外键字段名 -->
            <many-to-many class="com.waterworks.pojo.StArea" column="area_id"></many-to-many>
        </set>

     
        
    </class>
</hibernate-mapping>

抄表辖区hbm.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">
<!-- Generated 2018??8??22?? ????10:52:54 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.waterworks.pojo.StArea" table="tb_st_area">
        <id name="idSyArea" column="id_sy_area">
            <generator class="native" />
        </id>
        <property name="areaName" column="_area_name" />
        <property name="remark" column="_remark" />
        <property name="disabled" column="_disabled" />
        <!-- 员工-抄表辖区权限表(多对多) -->
        <!-- name放对象集合名,table放关系表名,inverse维护关系(true:放弃维护权限,false:不放弃维护权限)cascade="none"(不进行级联操作) -->
        <set name="empSet" table="tb_sy_emp_area_power" inverse="true" cascade="none" lazy="false">
           <!-- column放关系表中与本表有关系的外键字段名 -->
           <key column="area_id"></key>
           <!-- class放另外一张表实体类的全路径名 column放关系表中与另外一张表有关系的外键字段名 -->
           <many-to-many class="com.waterworks.pojo.SyEmp" column="emp_id"></many-to-many>
        </set>
        
    </class>
</hibernate-mapping>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值