Hibernate 双向ManyToMany 究极解决 新增-删除-修改-查询(4)

本文主要是介绍Hibernate 双向ManyToMany 究极解决 新增-删除-修改-查询(4),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Org增删改查:

同样看代码

package com.taomujian.dao;import java.util.List;import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
import org.taomujian.dao.OrgDAO;
import org.taomujian.dao.RoleDAO;
import org.taomujian.model.Org;
import org.taomujian.model.Role;public class OrgDAOTest {/*** 完整的插入org和role及其级联关系,需要配置CascadeType.PERSIST* * 注:因为关联关系被设置为有role管理,所以如果需要添加关联关系同时*    又不新增role表内的数据,则在此处需要使用role来维护关联关系*    【修改同新增】*/@Testpublic void testSaveOrg1(){OrgDAO orgDAO = new OrgDAO();Org org = new Org();org.setId("dd2");org.setName("我是org自己主动新增的a!");Role role = new Role();role.setId("111");role.setName("我是被org添加的a!");if(role.getOrgList().size()==0||!role.getOrgList().contains(org)){role.getOrgList().add(org);}if(org.getRoleList().size()==0||org.getRoleList().contains(role)){org.getRoleList().add(role);}orgDAO.saveOrg(org);}/*** 新增一条被控方的数据,同时更新被控方org与主控方role间的关联关系*/@Testpublic void testSaveOrg2(){RoleDAO  roleDAO = new RoleDAO();OrgDAO orgDAO = new OrgDAO();Role role = roleDAO.getRole("111");Org org = new Org();org.setId("dd3");org.getRoleList().add(role);    role.getOrgList().add(org);orgDAO.mergeOrg(org); }/*** 修改主空方role 与被控org的关联关系* 只增加关联关系到中间表中,需要添加CascadeType.MERGE* role表和org表中必须包含要关联的两条数据*/@Testpublic void testMergeOrg1(){RoleDAO  roleDAO = new RoleDAO();OrgDAO orgDAO = new OrgDAO();Role role = roleDAO.getRole("111");Org org = orgDAO.getOrg("dd2");org.getRoleList().add(role);    role.getOrgList().add(org);orgDAO.mergeOrg(org); }/*** 只更新org被控方表内的数据*/@Testpublic void testMergeOrg2(){OrgDAO orgDAO = new OrgDAO();Org org = new Org();org.setId("dd2");org.setName("我是org自己调用merge方法产生的a!");orgDAO.mergeOrg(org);}/*** 只删除被控方org,无法删除,会产生脏数据,因为存在外键约束,无法删除*/
//	@Test
//	public void testDelOrg1(){
//		OrgDAO orgDAO = new OrgDAO();
//
//	    Org org = new Org();
//	    org.setId("dd1");
//	    org.setRoleList(null);
//	    
//		orgDAO.delOrg(org);
//	}/***  被控方删除(先删除中间表记录)  */@Testpublic void testDelOrg2(){OrgDAO orgDAO = new OrgDAO();Org org = orgDAO.getOrg("dd1");testRemoveOrg_Role();orgDAO.delOrg(org);}/*** 只删除关联关系,需要设置CascadeType.MERGE*/@Testpublic void testRemoveOrg_Role(){OrgDAO orgDAO = new OrgDAO();Org org = orgDAO.getOrg("dd1");List<Role> roleList = org.getRoleList();for (int i=0;i<roleList.size();i++) {Role role = roleList.get(i);org.getRoleList().remove(role); // 删除组织机构表对角色的引用role.getOrgList().remove(org);// 删除角色表对组织机构表的引用}orgDAO.mergeOrg(org);}@Testpublic void testSchemaExport() {new SchemaExport(new Configuration().configure()).create(false, true);}
}

 

 

注:我的编译环境是  jdk6+j2ee6+junit4+sql2005

这篇关于Hibernate 双向ManyToMany 究极解决 新增-删除-修改-查询(4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819165

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir