多对多关联关系处理(王添乐)
来源:互联网 发布:阿里云服务器租用协议 编辑:程序博客网 时间:2024/06/05 07:24
1.user与task的关系是多对多的关联关系,那么我们建立第三张表user_task来表示这个多对多的关系。
2.在User.hbm.xml文件中写语句:
<set name="tasks" table="user_task" cascade="save-update" inverse="true">
<key column="user_id"></key>
<many-to-many column="task_id" class="com.innov8tion.pml.task.domain.Task"></many-to-many>
</set>
3.在Task.hbm.xml文件中写语句:
<set name="assignees" table="user_task" cascade="save-update" lazy="false">
<key column="task_id"></key>
<many-to-many column="user_id" class="com.innov8tion.pml.user.domain.User"></many-to-many>
</set>
4.这样,我在taskServiceImpl类中就可以写个如下方法来设置user与task之间的关系:
public Task updateTask(Task task, Integer[] assignees){
Task oldTask = getTaskById(task.getTaskId());
//set user_task relationship
oldTask.getAssignees().clear(); (1)
if(assignees != null && assignees.length > 0){
for(Integer userId : assignees){
User user = userDao.getUserById(userId);
oldTask.getAssignees().add(user); (2)
}
}
Date now = new Date();
oldTask.setProject(task.getProject());
oldTask.setUpdateTime(now);
oldTask.setPlanTime(task.getPlanHours(), task.getPlanMinutes());
oldTask.setActualTime(task.getActualHours(), task.getActualMinutes());
oldTask.setStartTime(task.getStartTime());
oldTask.setFinishTime(task.getFinishTime());
oldTask.setTitle(task.getTitle());
oldTask.setDescription(task.getDescription());
return this.taskDao.updateTask(oldTask);
}
注:
1.在Task类中定义了一个包含User类的列表,定义如下:
private Set assignees = new HashSet();
2.我们在userServiceImpl中,首先获取task,此时task与Session关联了,我们对task中的assignees 集合做任何操作,都会相应的反映到数据库的表user_task中。
3.在上面(1)中的意思是清除user_task中的关于oldTask中的所有记录。如果要移除指定的记录可以使用:
oldTask.getAssignees().remove(Object)语句。
4.在上面(2)中的意思是在user_task中添加一条oldTask与user的记录。此时,因为user是与数据库表User相
联系的,所以,不会插入相应的记录到User表中,尽管在Task.hbm.xml文件中设置了cascade="save-update"。
当然,如果user记录与数据库User表没有关系,即不设置user对象userId属性(主键),而是设置user的其他属性,比如姓名和年龄等字段,那么在(2)中执行时,还会插入一条user的记录到User表中。
- 多对多关联关系处理(王添乐)
- Hibernate 关联关系映射(多对多关联)
- Hibernate关联关系映射(多对一关联映射)
- Hibernate关联关系之一对多关联
- 多对多关联关系
- 多对一关联关系
- hibernate关联关系之多对多关系
- Hibernate -- 映射实体关联关系(多对多关联关系)
- Hibernate关联关系映射之一对多关联关系
- Hibernate关联关系映射之多对多关联关系
- 十、Hiberante多对多关联关系(单向)
- 十一、Hiberante多对多关联关系(双向)
- Hibernate关联关系映射(一对多/多对一)
- Hibernate(七)实现多对多关联映射关系
- Hibernate(七)实现多对多关联映射关系
- 多对多关联关系的使用
- Hibernate的多对多关联关系
- hibernate多对多关联关系
- 算法设计 最大网络流
- 笔记1:Java语言基础
- Linux下的汇编
- 公务员某考试开会听会能力 某研究生公务员听写如下
- 使用Win32 Internet API的下载文件
- 多对多关联关系处理(王添乐)
- 博客同步
- .net学习总结(6)之sqlserver 自定义函数与存储过程
- Web 设计:实现干净代码的12条定律
- [英语阅读]文化部出新规 假唱将受罚
- Eclipse环境下数据库应用(Sql server + HSqlDb)
- brief writing of javascript
- 可拖拽DIV
- T-SQL(3)-批处理