Hibernate多对多(一对多)关联保存

Hibernate多对多,同时包含一对多,双向关联保存实例。

一。介绍

此例子是本人在项目中涉及到的例子。主要拿出来3张表来解释Hibernate一对多以及多对多的保存操作。

表介绍:

用户表(ITYW_USER);工作表(CHECK_WORK);工作表和用户表的关联表(CHECKWORK_OPERATOR)

二.实体

 

package com.inpoup.itoma.entity.user;

import java.util.HashSet;
import java.util.Set;

import com.inpoup.itoma.entity.user.Checkin;
import com.inpoup.itoma.entity.task.TodayTask;
import com.inpoup.itoma.entity.work.AssignWork;
import com.inpoup.itoma.entity.work.CheckWork;
import com.inpoup.itoma.entity.work.CheckWorkRecord;
import com.inpoup.itoma.entity.work.CheckWorkRecordTemplate;
import com.inpoup.itoma.entity.work.DailyWork;
import com.inpoup.itoma.entity.work.DailyWorkRecord;
import com.inpoup.itoma.entity.work.DailyWorkRecordTemplate;
import com.inpoup.itoma.entity.work.PersonalWork;

/**
 * 人员表对应实体类
 * @author  X宝龙
 * @version 1.0
 * @since    2013-06-07
 *
 */
public class User {

	private int id;							//ID
	private String account;						//帐户
	private String password;					//密码
	private String name;						//姓名
	private String sex;						//性别
	private String tel;						//电话
	private String email;						//E-Mail
	private String depart;						//部门
	private String company;						//公司
	private int state;						//状态
	
	private Set<CheckWork> makeCheckWorks = new HashSet<CheckWork>();
	private Set<CheckWork> actionCheckWorks = new HashSet<CheckWork>();
	private Set<AssignWork> makeAssignWorks = new HashSet<AssignWork>();
	private Set<DailyWork> makeDailyWorks = new HashSet<DailyWork>();
	private Set<DailyWork> actionDailyWorks = new HashSet<DailyWork>();
	private Set<PersonalWork> personalWorks = new HashSet<PersonalWork>();
	private Set<Role> roles = new HashSet<Role>();
	private Set<CheckWorkRecordTemplate> checkWorkRecordTemplates = new HashSet<CheckWorkRecordTemplate>();
	private Set<CheckWorkRecord> checkWorkRecords = new HashSet<CheckWorkRecord>();
	private Set<DailyWorkRecord> dailyWorkRecords = new HashSet<DailyWorkRecord>();
	private Set<DailyWorkRecordTemplate> dailyWorkRecordTemplates = new HashSet<DailyWorkRecordTemplate>();
	
	public int getId() {
		return id;
	}

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

	public String getAccount() {
		return account;
	}

	public void setAccount(String account) {
		this.account = account;
	}

	public String getPassword() {
		return password;
	}

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

	public String getName() {
		return name;
	}

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

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getDepart() {
		return depart;
	}

	public void setDepart(String depart) {
		this.depart = depart;
	}

	public String getCompany() {
		return company;
	}

	public void setCompany(String company) {
		this.company = company;
	}

	public int getState() {
		return state;
	}

	public void setState(int state) {
		this.state = state;
	}


	public Set<CheckWork> getMakeCheckWorks() {
		return makeCheckWorks;
	}

	public void setMakeCheckWorks(Set<CheckWork> makeCheckWorks) {
		this.makeCheckWorks = makeCheckWorks;
	}

	public Set<CheckWork> getActionCheckWorks() {
		return actionCheckWorks;
	}

	public void setActionCheckWorks(Set<CheckWork> actionCheckWorks) {
		this.actionCheckWorks = actionCheckWorks;
	}

	

	public Set<AssignWork> getMakeAssignWorks() {
		return makeAssignWorks;
	}

	public void setMakeAssignWorks(Set<AssignWork> makeAssignWorks) {
		this.makeAssignWorks = makeAssignWorks;
	}

	public Set<DailyWork> getMakeDailyWorks() {
		return makeDailyWorks;
	}

	public void setMakeDailyWorks(Set<DailyWork> makeDailyWorks) {
		this.makeDailyWorks = makeDailyWorks;
	}

	public Set<DailyWork> getActionDailyWorks() {
		return actionDailyWorks;
	}

	public void setActionDailyWorks(Set<DailyWork> actionDailyWorks) {
		this.actionDailyWorks = actionDailyWorks;
	}

	public Set<PersonalWork> getPersonalWorks() {
		return personalWorks;
	}

	public void setPersonalWorks(Set<PersonalWork> personalWorks) {
		this.personalWorks = personalWorks;
	}

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

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

	public Set<CheckWorkRecordTemplate> getCheckWorkRecordTemplates() {
		return checkWorkRecordTemplates;
	}

	public void setCheckWorkRecordTemplates(
			Set<CheckWorkRecordTemplate> checkWorkRecordTemplate) {
		this.checkWorkRecordTemplates = checkWorkRecordTemplate;
	}

	public Set<CheckWorkRecord> getCheckWorkRecords() {
		return checkWorkRecords;
	}

	public void setCheckWorkRecords(Set<CheckWorkRecord> checkWorkRecord) {
		this.checkWorkRecords = checkWorkRecord;
	}

	public Set<DailyWorkRecord> getDailyWorkRecords() {
		return dailyWorkRecords;
	}

	public void setDailyWorkRecords(Set<DailyWorkRecord> dailyWorkRecords) {
		this.dailyWorkRecords = dailyWorkRecords;
	}

	public Set<DailyWorkRecordTemplate> getDailyWorkRecordTemplates() {
		return dailyWorkRecordTemplates;
	}

	public void setDailyWorkRecordTemplates(
			Set<DailyWorkRecordTemplate> dailyWorkRecordTemplates) {
		this.dailyWorkRecordTemplates = dailyWorkRecordTemplates;
	}
	
}

  

package com.inpoup.itoma.entity.work;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import com.inpoup.itoma.entity.user.User;

/**
 * 巡检工作表对应实体类
 * @author  常宝龙
 * @version 1.0
 * @since    2013-06-07
 *
 */
public class CheckWork{

	private int id;							//ID
	private Date planStartTime;					//计划开始时间
	private Date planEndTime;					//计划结束时间
	private String operationStartTime;				//执行开始时间
	private String operationEndTime;				//执行结束时间
	private String workCycle;					//工作周期
	private String workDay;						//工作日
	private String cusRemind;					//定制提醒
	private int remindTimes;					//提醒次数
	private int remindCycle;					//提醒周期
	private String workCont;					//工作内容
	private User user;						//计划制定人(many-to-one关系)
	private Date planMakeTime;					//计划制定时间
	private int planState;						//计划状态
	private int state;						//状态
	
	private Set<User> users = new HashSet<User>();
	private Set<CheckWorkRecordTemplate> checkWorkRecordTemplate = new HashSet<CheckWorkRecordTemplate>();
	private Set<CheckWorkRecord> checkWorkRecord = new HashSet<CheckWorkRecord>();
	
	public int getId() {
		return id;
	}

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

	public Date getPlanStartTime() {
		return planStartTime;
	}

	public void setPlanStartTime(Date planStartTime) {
		this.planStartTime = planStartTime;
	}

	public Date getPlanEndTime() {
		return planEndTime;
	}

	public void setPlanEndTime(Date planEndTime) {
		this.planEndTime = planEndTime;
	}

	public String getOperationStartTime() {
		return operationStartTime;
	}

	public void setOperationStartTime(String operationStartTime) {
		this.operationStartTime = operationStartTime;
	}

	public String getOperationEndTime() {
		return operationEndTime;
	}

	public void setOperationEndTime(String operationEndTime) {
		this.operationEndTime = operationEndTime;
	}

	public String getWorkCycle() {
		return workCycle;
	}

	public void setWorkCycle(String workCycle) {
		this.workCycle = workCycle;
	}

	public String getWorkDay() {
		return workDay;
	}

	public void setWorkDay(String workDay) {
		this.workDay = workDay;
	}

	public String getCusRemind() {
		return cusRemind;
	}

	public void setCusRemind(String cusRemind) {
		this.cusRemind = cusRemind;
	}

	public int getRemindTimes() {
		return remindTimes;
	}

	public void setRemindTimes(int remindTimes) {
		this.remindTimes = remindTimes;
	}

	public int getRemindCycle() {
		return remindCycle;
	}

	public void setRemindCycle(int remindCycle) {
		this.remindCycle = remindCycle;
	}

	public String getWorkCont() {
		return workCont;
	}

	public void setWorkCont(String workCont) {
		this.workCont = workCont;
	}

	public User getUser() {
		return user;
	}

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

	public Date getPlanMakeTime() {
		return planMakeTime;
	}

	public void setPlanMakeTime(Date planMakeTime) {
		this.planMakeTime = planMakeTime;
	}

	public int getPlanState() {
		return planState;
	}

	public void setPlanState(int planState) {
		this.planState = planState;
	}

	public int getState() {
		return state;
	}

	public void setState(int state) {
		this.state = state;
	}

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

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

	public Set<CheckWorkRecordTemplate> getCheckWorkRecordTemplate() {
		return checkWorkRecordTemplate;
	}

	public void setCheckWorkRecordTemplate(
			Set<CheckWorkRecordTemplate> checkWorkRecordTemplate) {
		this.checkWorkRecordTemplate = checkWorkRecordTemplate;
	}

	public Set<CheckWorkRecord> getCheckWorkRecord() {
		return checkWorkRecord;
	}

	public void setCheckWorkRecord(Set<CheckWorkRecord> checkWorkRecord) {
		this.checkWorkRecord = checkWorkRecord;
	}
	
}

 三.表结构


 

 

四.配置映射文件

user.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
	version:  1.0
	date:  2013-06-06
	author:  常宝龙
 -->
  <hibernate-mapping package="com.inpoup.itoma.entity.user">
  	<!-- 人员表 -->
  	<class name="User" table="ITYW_USER">
  		<id name="id" column="ID">
  			<generator class="sequence">
  				<param name="sequence">SEQ_ITYW_USER</param>
  			</generator>
  		</id>
  		<property name="account" type="java.lang.String">
 			<column name="ACCOUNT" ></column>
 		</property>
 		<property name="password" type="java.lang.String">
 			<column name="PASSWORD" ></column>
 		</property>
 		<property name="name" type="java.lang.String">
 			<column name="NAME" ></column>
 		</property>
 		<property name="sex" type="java.lang.String">
 			<column name="SEX" ></column>
 		</property>
 		<property name="tel" type="java.lang.String">
 			<column name="TEL" ></column>
 		</property>
 		<property name="email" type="java.lang.String">
 			<column name="EMAIL" ></column>
 		</property>
 		<property name="depart" type="java.lang.String">
 			<column name="DEPART" ></column>
 		</property>
 		<property name="company" type="java.lang.String">
 			<column name="COMPANY" ></column>
 		</property>
 		<property name="state" type="java.lang.Integer">
 			<column name="STATE" ></column>
 		</property>
 		<set name="makeCheckWorks" inverse="true">
 			<key column="PLAN_MAKER"></key>
 			<one-to-many class="com.inpoup.itoma.entity.work.CheckWork" />
 		</set>
  		<!-- 人员表与巡检工作表的多对多关系 -->
 		<set name="actionCheckWorks" table="CHECKWORK_OPERATOR">
 			<key column="USER_ID"></key>
 			<many-to-many class="com.inpoup.itoma.entity.work.CheckWork" column="CHECKWORK_ID"></many-to-many>
 		</set>
 		<set name="makeDailyWorks" inverse="true">
 			<key column="PLAN_MAKER"></key>
 			<one-to-many class="com.inpoup.itoma.entity.work.DailyWork" />
 		</set>
  		<!-- 人员表与日常工作表的多对多关系 -->
 		<set name="actionDailyWorks" table="DAILYWORK_OPEARTOR">
 			<key column="PLAN_MAKER"></key>
 			<many-to-many class="com.inpoup.itoma.entity.work.DailyWork" column="DAILYWORK_ID"></many-to-many>
 		</set>
 		<set name="makeAssignWorks" inverse="true">
 			<key column="PLAN_MAKER"></key>
 			<one-to-many class="com.inpoup.itoma.entity.work.AssignWork" />
 		</set>
  		<!-- 人员表与个人工作表的多对多关系 -->
 		<set name="personalWorks" table="PERSONALWORK_OPERATOR">
 			<key column="USER_ID"></key>
 			<many-to-many class="com.inpoup.itoma.entity.work.PersonalWork" column="PERSONALWORK_ID"></many-to-many>
 		</set>
 		<!-- 人员表与角色表的多对多关系 -->
 		<set name="roles" table="USER_ROLE">
 			<key column="USER_ID"></key>
 			<many-to-many class="com.inpoup.itoma.entity.user.Role" column="ROLE_ID"></many-to-many>
 		</set>
 		<set name="checkWorkRecordTemplates" inverse="true">
 			<key column="TEMPLATE_MAKER"></key>
 			<one-to-many class="com.inpoup.itoma.entity.work.CheckWorkRecordTemplate" />
 		</set>
 		<set name="checkWorkRecords" inverse="true">
 			<key column="RECORD_USER_ID"></key>
 			<one-to-many class="com.inpoup.itoma.entity.work.CheckWorkRecord" />
 		</set>
 		<set name="dailyWorkRecords" inverse="true">
 			<key column="RECORD_USER_ID"></key>
 			<one-to-many class="com.inpoup.itoma.entity.work.DailyWorkRecord" />
 		</set>
 		<set name="dailyWorkRecordTemplates" inverse="true">
 			<key column="TEMPLATE_MAKER"></key>
 			<one-to-many class="com.inpoup.itoma.entity.work.DailyWorkRecordTemplate" />
 		</set>
  	</class>

 work.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
	version:  1.0
	date:  2013-06-07
	author:  常宝龙
 -->
 <hibernate-mapping package="com.inpoup.itoma.entity.work">
<!-- 巡检工作表 -->
 	<class name="CheckWork" table="CHECK_WORK">
 		<id name="id" column="ID">
 			<generator class="sequence">
 				<param name="sequence">SEQ_CHECK_WORK</param>
 			</generator>
 		</id>
 		<property name="planStartTime" type="java.util.Date">
 			<column name="PLAN_START_TIME"></column>
 		</property>
 		<property name="planEndTime" type="java.util.Date">
 			<column name="PLAN_END_TIME"></column>
 		</property>
 		<property name="operationStartTime" type="java.lang.String">
 			<column name="OPERATION_START_TIME"></column>
 		</property>
 		<property name="operationEndTime" type="java.lang.String">
 			<column name="OPERATION_END_TIME"></column>
 		</property>
 		<property name="workCycle" type="java.lang.String">
 			<column name="WORK_CYCLE" ></column>
 		</property>
 		<property name="workDay" type="java.lang.String">
 			<column name="WORK_DAY" ></column>
 		</property>
 		<property name="cusRemind" type="java.lang.String">
 			<column name="CUS_REMIND" ></column>
 		</property>
 		<property name="remindTimes" type="java.lang.Integer">
 			<column name="REMIND_TIMES" ></column>
 		</property>
 		<property name="remindCycle" type="java.lang.Integer">
 			<column name="REMIND_CYCLE" ></column>
 		</property>
 		<property name="workCont" type="java.lang.String">
 			<column name="WORK_CONT" ></column>
 		</property>
 		<many-to-one name="user" column="PLAN_MAKER" class="com.inpoup.itoma.entity.user.User">
 		</many-to-one>
 		<property name="planMakeTime" type="java.util.Date">
 			<column name="PLAN_MAKE_TIME"></column>
 		</property>
 		<property name="planState" type="java.lang.Integer">
 			<column name="PLAN_STATE" ></column>
 		</property>
 		<property name="state" type="java.lang.Integer">
 			<column name="STATE" ></column>
 		</property>
      </class>

 五。保存实例

package com.inpoup.itoma.service.work.impl;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.inpoup.itoma.dao.work.CheckWorkDao;
import com.inpoup.itoma.entity.user.User;
import com.inpoup.itoma.entity.work.CheckWork;
import com.inpoup.itoma.service.work.CheckWorkService;
import com.inpoup.web.core.dao.BaseDao;
import com.inpoup.web.core.service.impl.BaseServiceImpl;

/**
 * 巡检工作Service实现类
 * @author  常宝龙
 * @since		2013-06-13
 * @version	1.0
 *
 */
public class CheckWorkServiceImpl extends BaseServiceImpl<CheckWork> implements CheckWorkService{
	
	public CheckWorkServiceImpl(BaseDao<CheckWork> baseDao) {
		super(baseDao);
	}
	
	private CheckWorkDao checkWorkDao;
	
	/**
	 * 制定巡检工作计划
	 */
	@Override
	public String makeCheckWork(Date planStartTime, Date planEndTime,
			String operationStartTime, String operationEndTime,
			String workCycle, String workDay, String cusRemind,
			String remindTimes, String remindCycle, String workCont,
			String makeId, String planMakeTime, String planState, String state,String assignPerson) throws Exception{
			//时间转换
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			CheckWork checkWork = new CheckWork();
			User user = new User();
			//System.out.println("============================="+planStartTime);
			checkWork.setPlanStartTime(planStartTime);
			checkWork.setPlanEndTime(planEndTime);
			checkWork.setOperationStartTime(operationStartTime);
			checkWork.setOperationEndTime(operationEndTime);
			checkWork.setWorkCycle(workCycle);
			checkWork.setWorkDay(workDay);
			checkWork.setCusRemind(cusRemind);
			checkWork.setRemindTimes(Integer.parseInt(remindTimes));
			checkWork.setRemindCycle(Integer.parseInt(remindCycle));
			checkWork.setWorkCont(workCont);
			checkWork.setPlanMakeTime(simpleDateFormat.parse(planMakeTime));
			checkWork.setPlanState(Integer.parseInt(planState));
			checkWork.setState(Integer.parseInt(state));
			user.setId(Integer.parseInt(assignPerson));
			user.getMakeCheckWorks().add(checkWork);
			checkWork.getUsers().add(user);
			user.setId(Integer.parseInt(makeId));
			checkWork.setUser(user);
//			//user.setId(Integer.parseInt(makeId));
//			//解析分配执行人ID
//			//user.setId(Integer.parseInt(assignPerson[i]));
//			//assignPerson[i]
//			user.getMakeCheckWorks().add(checkWork);
//			checkWork.getUsers().add(user);
//			checkWork.setUser(user);
			//this.getCheckWorkDao().save(checkWork);
			this.addService(checkWork);
			return "success";
	}

	public CheckWorkDao getCheckWorkDao() {
		return checkWorkDao;
	}

	public void setCheckWorkDao(CheckWorkDao checkWorkDao) {
		this.checkWorkDao = checkWorkDao;
	}
	
	

}

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值