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 Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

MySQL底层文件的查看和修改方法

《MySQL底层文件的查看和修改方法》MySQL底层文件分为文本类(可安全查看/修改)和二进制类(禁止手动操作),以下按「查看方法、修改方法、风险管控三部分详细说明,所有操作均以Linux环境为例,需... 目录引言一、mysql 底层文件的查看方法1. 先定位核心文件路径(基础前提)2. 文本类文件(可直

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可