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

Hibernate中1对多关联使用中容易犯错误的一个问题

阅读更多

有Team和Student组成1对多的关系,现在的情况是Team持有一个Studen集合set1,另外还有另一个Student集合set2,我们想把引用关系从set1转换到set2,并删除set1

一般我们会编写如下代码:

 

Student newStu=new Student();
newStu.setName(
"11");
Set set
=new HashSet();
set.add(newStu);

Team team 
=(Team)session.get(......);
team.getStudents().clear();
team.setStudents(set);

这样做会出现Don't dereference a collection with cascade="all-delete-orphan"异常

这是因为,对于Team的Student这个set集合,它本身是一个持久的集合,该集合存在域Hibernate的对象池中,通过team.setStudents(set)把一个并未被持久化的集合进行引用,因此会出现异常,正确做法如下

 

Student newStu=new Student();
newStu.setName(
"11");
Set set
=new HashSet();
set.add(newStu);

Team team 
=(Team)session.get(......);
team.getStudents().clear();
team.setStudents().addAll(set);

采用红色部分,在原有集合的基础上,把新集合元素加进去,同时,在Team.hbm.xml中需要如下配置

 

  <set name="students" lazy="true" inverse="true" cascade="save-update,delete-orphan">
         
<key column="team_id"></key>
         
<one-to-many class="Cascade.delete.Student"/>
       
</set>

 

 

分享到:
评论

相关推荐

    hibernate多对多关联映射

    在数据库设计中,多对多关联表示两个表之间的关系,如学生和课程的关系,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在Hibernate中,这种关系需要通过中间表(也称为关联表或连接表)来实现,它...

    hibernate多对多双向关联

    该描述提供了一个博客链接,虽然没有直接给出具体内容,但我们可以假设博客内容会详细解释如何在Hibernate中设置和管理多对多双向关联。这通常包括配置实体类、定义关联映射、使用中间表以及进行增删改查操作。在...

    Hibernate一对多使用非主键关联设置

    在标准的关系型数据库设计中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。例如,一个部门可以有多名员工,而每个员工只属于一个部门。在Hibernate中实现这种关系,我们不一定要依赖主键作为...

    hibernate多对一单向关联关系实现源码

    对于单向多对一关联,通常是在多方(拥有多个实体)的类中添加一个对单方(拥有单一实体)的引用。 例如,我们可以创建两个实体类:`Employee`(员工)和`Department`(部门)。在`Employee`类中,我们将有一个`...

    hibernate一对多,多对一,一对多双向关联

    在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户(多对一),而一个商品可以被多个订单购买,同时一个订单也可以包含多个商品(一对多双向关联)。这个标题暗示...

    Hibernate双向一对一关联映射(注解版)

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而提高开发效率。本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的...

    hibernate多对一关联demo

    本教程将详细解释如何在Hibernate中实现多对一的关联关系,以及如何通过一个实际的示例来演示这一过程。 【描述】:“博客地址:http://blog.csdn.net/smilefyx/article/details/48603923” 在上述博客文章中,...

    hibernate一对一关联关系

    一对一关联关系在现实世界中很常见,比如一个人只有一个身份证,或者一个公司的总部只有一个。在Hibernate中,设置一对一关联关系可以帮助我们更好地管理和操作这些具有唯一对应关系的数据。 1. **配置一对一关联**...

    hibernate使用主键关联的一对一关系

    在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来实现两个实体类之间的这种一对一绑定。下面我们将深入探讨这一主题。 首先,我们需要理解一对一关系的概念。在数据库中,一对一关系意味...

    hibernate一对多关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对多关联映射是一种常见的关系映射方式,它用于表示一个实体(如用户)可以拥有多个关联实体(如订单)。在这个场景中,"一"通常代表父实体,"多"代表子实体。这篇博客文章...

    hibernate双向一对多关联映射(注解版)

    在Java的持久化框架Hibernate中,双向一对多关联映射是一种常见的关系映射方式,它模拟了数据库中的外键关联,使得一个实体可以拥有多个另一个实体的实例。在这个注解版的实现中,我们将深入探讨如何使用Hibernate的...

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

    总的来说,这篇博客和相关代码示例为开发者提供了一个理解和实现Hibernate中多对多单向关联的起点,帮助他们更好地处理复杂的数据库关系映射。学习和实践这部分内容对于提升Java后端开发能力,特别是使用Hibernate...

    Hibernate ORM - 一对多双向关联关系

    标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...

    hibernate实现多对多关联关系源码

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联关系是一种常见的实体间关系类型,它表示一个实体可以与多个其他实体相关联,反之亦然。本源码示例将深入探讨如何使用Hibernate来配置和管理这种复杂的...

    Hibernate一对一,一对多,多对多实例

    一对多关联常出现在一个实体可以对应多个其他实体的情况,如一个班级有多个学生。在Hibernate中,可以通过在一方实体的属性上使用`@OneToMany`注解,而在多方实体上使用`@ManyToOne`注解来定义这种关系。例如,...

    hibernate一对一主键关联映射(单项关联)

    在一对一主键关联映射中,"单项关联"指的是在一个实体类中定义了对另一个实体类的引用,而另一个实体类并未反过来引用。这通常是由于业务逻辑上的需求,例如,一个人只有一个身份证,但身份证并不知道它属于哪个人。...

    hibernate 单向多对多关联映射练习

    在多对多关联中,两个实体类可以相互拥有多个实例,但只在一个方向上建立关联。例如,学生和课程的关系,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在这个场景下,"学生"和"课程"之间的关联就是多...

    Hibernate一对一主键关联映射(双向关联)

    "双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,同时在实体B中也有一个对实体A的引用。 在实际配置中,我们可以使用以下元素来实现这种映射: 1. `@OneToOne`:...

    Hibernate基于连接表的一对多单向关联

    标题 "Hibernate基于连接表的一对多单向关联" 涉及的是数据库对象关系映射(ORM)框架Hibernate中的一个重要概念。在Java开发中,Hibernate是广泛使用的工具,它允许开发者将Java类与数据库表进行映射,简化了数据...

    Hibernate基于外键的一对多单向关联

    “Hibernate基于外键的一对多单向关联”这个标题指的是在Java持久化框架Hibernate中,如何通过外键实现一个实体类(如订单)与另一个实体类(如商品)之间的一对多关系,并且这种关联是单向的,即从订单端可以访问到...

Global site tag (gtag.js) - Google Analytics