`
xly_971223
  • 浏览: 1277429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

终于完成hibernate对多对删除中间表了

阅读更多
先把代码贴上来
public void grantPrograms(Long roleId, Long[] programIds){
		Role role = get(roleId);
		Set<Program> programs = role.getPrograms();
		//第一趟遍历, 删除未被选中的节目
		for(Iterator<Program> it = programs.iterator(); it.hasNext(); ){
			Program program = it.next();
			if( !ArrayUtils.contains(programIds, program.getId()) ){
				program.getRoles().remove(role); 
				it.remove(); //开始用programs.remove(program);抛java.util.ConcurrentModificationException
			}
		}
		
		//第二趟遍历 插入新选中的节目
		for(Long selectProgramId : programIds){
			if(isNewSelected(programs, selectProgramId)){
				Program p = get(Program.class, selectProgramId);
				p.getRoles().add(role); //添加角色到节目的关联
				programs.add(p);
			}
		}
		
		save(role);
	}
private boolean isNewSelected(Set<Program> programs, Long selecteId){
		for(Program program : programs)
				if(program.getId() == selecteId)return false;
		return true;
	}


可分为三步走
1.删除中间表中的关联,如果包含在被选中集合中 则忽略
2.插入新选择的关系到中间表 如果已经存在 则忽略
3.保存
ps:上面的代码只是对中间表数据产生影响 不会更新两边表的数据
分享到:
评论
1 楼 lctexe 2012-01-06  
            

相关推荐

    hibernate多对多关联映射

    `org.hibernate.persister.collection.AbstractCollectionPersister`和`org.hibernate.action.internal.CollectionRemoveAction`等类是处理多对多关联删除的关键。通过阅读源码,我们可以了解到Hibernate如何处理...

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    hibernate多对多

    在实际应用中,添加、删除和查询多对多关系的操作可以通过Hibernate提供的API轻松完成。例如,添加一个用户的角色: ```java User user = new User(); Role role = new Role(); // 假设已经设置了user和role的相关...

    hibernate多对多映射的例子

    在Hibernate中,实现多对多映射通常需要通过中间表来完成,这个中间表包含两个外键,分别引用两个参与关系的实体。以下是实现多对多映射的步骤: 1. **定义实体类**:首先,我们需要为相关的两个实体创建Java类,...

    JavaEE Hibernate多对多简单示例

    在JavaEE应用中,多对多关系通常通过中间表(或称为关联表)来实现,该表包含两个实体的主键作为外键。让我们深入了解一下这个简单的Hibernate多对多示例。 首先,我们需要定义两个实体类,例如`Student`和`Course`...

    hibernate 一对一 多对多的关系

    `@ManyToMany`注解声明了多对多关系,`@JoinTable`定义了中间表及其关联字段。`mappedBy`属性表示反向关联,即Student类中的courses属性是Course类中的students属性的反向关联。 ### 知识点拓展 - **CascadeType**...

    Hibernate 系列教程 双向多对多

    本教程主要聚焦于Hibernate中的一个复杂关系类型——双向多对多关系。 双向多对多关系是两个实体类之间的一种关联,每个实体都可以拥有多个实例,同时每个实例也可以关联到多个其他实体。这种关系在现实生活中很...

    Hibernate注解多对多映射小实例

    这样,Hibernate知道如何通过`student_course`中间表来处理多对多关系。 在`Course`类中,我们也同样使用`@ManyToMany`注解,但是这次我们需要明确地定义中间表`student_course`,通过`@JoinTable`注解指定连接列`...

    Hibernate多对多双向关联(annotation/xml)

    本主题将深入探讨使用Hibernate进行多对多双向关联的实现,既可以通过注解(Annotation)方式,也可以通过XML配置文件来完成。 首先,我们来看多对多关联的基本概念。在数据库设计中,当两个实体之间存在多个实例...

    Hibernate原理

    3. **多对多(Many-to-Many)**:用于表示两个实体集合之间的多对多关联关系,这种关系通常需要通过一个中间表来实现。 #### Hibernate核心组件及工作流程 Hibernate的核心组件包括SessionFactory、Session、...

    hibernate关系映射网址

    本文将详细介绍Hibernate中的关系映射机制,包括一对一、一对多、多对一以及多对多等不同类型的映射方式,并探讨其背后的原理及最佳实践。 #### 二、Hibernate关系映射基础 ##### 2.1 映射文件简介 在Hibernate中...

    hibernate-Annotation.jar

    - `@ManyToMany`:多对多关联,两个实体类之间存在多对多的关系,通常需要一个中间表来维护关系。 5. **懒加载和级联操作注解** - `@LazyCollection(LazyCollectionOption.EXTRA)`:用于实现懒加载,只有在真正...

    Hibernate思维导图

    13. **多对多(Many-to-Many)关系映射**:这种关系需要一个中间表来存储两个实体类的关联,使用`@ManyToMany`注解并指定关联的表和属性。 14. **懒加载(Lazy Loading)与立即加载(Eager Loading)**:懒加载策略...

    hibernate讲义

    7. **一对多、多对一、一对一关系映射** - 通过 @OneToMany、@ManyToOne 和 @OneToOne 注解定义不同类型的关联关系,包括 cascade(级联操作)和 fetch(加载策略)属性。 8. **集合映射** - Hibernate 支持 List...

    Hibernate3.1

    ORM框架如Hibernate,消除了手动编写SQL语句的需要,通过提供一个中间层来处理数据交互,使开发者可以专注于业务逻辑而不是底层数据库操作。 ### Hibernate 3.1 主要特点 1. **注解支持**:在Hibernate 3.1中,除了...

    hibernate基本配置及使用方法

    ### 五、Hibernate的一对多和多对多关系配置 1. **一对一(OneToOne)**:一个实体对应另一个实体的一个实例。通过`@OneToOne`注解实现,可以通过`@JoinColumn`指定关联字段。 2. **一对多(OneToMany)**:一个...

    hibernate_second4项目源码

    在Hibernate中,多对多关系是一种常见的数据库表之间的关联类型,例如用户和角色的关系,一个用户可以有多个角色,一个角色也可以被多个用户拥有。实现这种关系通常涉及到第三方关联表,即一个用来存储两个实体关系...

    Hibernate课程

    - **多对多关联**:@ManyToMany的实现,包括中间表的管理。 **5. 集合映射** - **List、Set、Map**:理解这些集合类型在Hibernate中的映射,以及它们的区别。 - **懒加载与立即加载**:了解如何配置集合的加载策略...

    Hibernate_manytomanyTest.rar

    总结,Hibernate中的多对多关系映射是通过`&lt;many-to-many&gt;`元素实现的,通过中间表完成两个实体间的关联。在实际开发中,理解并熟练掌握多对多关系的配置和操作,能够极大地提高开发效率,降低数据管理的复杂性。在...

Global site tag (gtag.js) - Google Analytics