`
sfc235300
  • 浏览: 42199 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JPA @onetomany 解决孤子问题

 
阅读更多

最近刚接触JPA就遇到一个一对多级联更新的棘手问题

父类A(为简单只写主要部分)

class A{

     @OneToMany(cascade = CascadeType.ALL, mappedBy = "a")

     private List<B> bs=new ArrayList<B>();

}

子类B

class B{

      @ManyToOne

      private A a;

}

 

假如当A对象的bs中有两个B对象,当删除其中一个B对象后,再对A对象进行保存,子类B对应的数据表中应该删除这条记录,可事实并非如此;当A对象的bs中有新增或某个B对象更新属性后,保存A对象会级联更新B表,唯独删除不行。

 

后查资料须在@OneToMany中增加属性orphanRemoval = true,同时在操作A对象时一定要注意bs的引用不能改变,具体例子如下:

假如改变后的列表放在 private List<B> bs_new中

A  a=dao.findbyId(id);

a.getBS.clear();

a.getBS.addAll(bs_new);

 

如果用类似a.setBS(bs_new);这种方式会报错,因为bs属性的引用已经发生了变化。

分享到:
评论

相关推荐

    JPA_OneToMany学习教程

    对于OneToMany关系,我们需要在父实体上使用@OneToMany注解,并在子实体上使用@ManyToOne注解来建立双向关联。 3. **@OneToMany注解**:此注解包含几个重要的属性,如`mappedBy`、`fetch`和`cascade`。`mappedBy`...

    Hibernate JPA

    Hibernate JPA作为一种成熟且广泛使用的ORM解决方案,不仅简化了Java应用程序中对象与关系型数据库之间的交互,还为开发者提供了强大的工具和灵活的配置选项。无论是初学者还是经验丰富的开发者,都能从中受益。了解...

    spring data jpa 动态更新@DynamicUpdate

    在Java世界中,Spring Data JPA是一个非常流行的框架,它为开发者提供了与关系数据库交互的便利,通过简化JPA(Java Persistence API)的使用。在处理大量数据时,提高性能和效率是至关重要的,这就是`@...

    JPA课程manyToMany OneToMany 等全部测试

    在本课程中,我们将深入探讨JPA中的一些关键关系映射类型,包括`@ManyToMany`、`@OneToMany`等,以及它们的实际应用和测试。 ### `@ManyToMany`关系 在数据库设计中,`ManyToMany`关系表示两个实体之间存在多对多...

    JPA注解@Access实例

    **JPA注解@Access详解** Java Persistence API (JPA) 是Java中用于对象关系映射(ORM)的标准框架,它允许开发人员将Java类与数据库表进行映射,从而简化数据操作。在JPA中,`@Access`注解是用于指定实体属性访问...

    Ejb3-OneToMany--Good.rar

    在博客链接中,可能详细讲解了`@OneToMany`关系的实践案例,包括如何配置、使用和优化,以及可能遇到的问题和解决方案。访问这个链接可以获取更多关于EJB3中一对多关系映射的深入理解和实用技巧。 总之,`@...

    Hibernate- oneToMany using annotation

    `@OneToMany`注解是Hibernate提供的JPA(Java Persistence API)的一部分,它允许我们在实体类中定义一个集合属性,该属性对应于数据库中另一张表的一系列记录。这个注解的使用通常配合`@JoinColumn`或`@JoinTable`...

    JPA学习总结(三)--JPAOneToMany双向关联

    3.懒加载与即时加载:默认情况下,`@OneToMany`是懒加载的,这意味着只有在真正需要子实体集合时才会去数据库查询。若需立即加载,可以使用`fetch = FetchType.EAGER`。 4. 级联操作的明智选择:虽然`CascadeType....

    在JPA的@Query注解中使用limit条件(详解)

    JPA @Query 注解中使用 Limit 条件详解 在 Java 持久层 API(JPA)中使用 @Query 注解时,需要注意 Limit 条件的使用。在本文中,我们将详细介绍如何在 JPA 的 @Query 注解中使用 Limit 条件。 Limit 条件的使用 ...

    JPA-2 基本注解

    在实际项目中,还可以结合使用其他高级注解,如@OneToMany、@ManyToOne、@OneToOne、@JoinColumn等,来处理更复杂的关系映射。JPA还支持查询语言JPQL(Java Persistence Query Language)和 Criteria API,提供更...

    jpa-day3-onetomany.zip

    在Customer实体类中,我们使用`@OneToMany`注解来定义与Contact的关系。这个注解的参数可以设置为联系人的集合,并指定映射的字段。例如: ```java @Entity public class Customer { @Id @GeneratedValue...

    hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法

    为了解决这个问题,我们可以使用 Spring 提供的一个支持类OpenSessionInViewFilter,这个类可以在发起一个页面请求时打开 Hibernate 的 Session,并保持这个 Session 的生命周期,直到这个请求结束。这样可以确保 ...

    jpa的实体映射关系7种

    双方都需要使用`@OneToMany`和`@ManyToOne`注解来定义关系,且`mappedBy`应设置在`@OneToMany`的一侧。 5. **双向多对一**: 相对于双向一对一,这里是一方可以拥有多个另一方实体,但两者都知道这个关系。双方都...

    jpa--10.单向一对多

    在JPA中,单向一对多关系通常通过在多方实体上定义`@ManyToOne`注解,而在一方实体上定义`@OneToMany`注解来实现。`@OneToMany`注解用于一方实体,表示这个实体拥有多方实体的集合。而`@ManyToOne`注解则用在多方...

    Hibernate 注解一对多,多对一

    本文将深入探讨Hibernate中的两个关键概念——注解声明的一对多(@OneToMany)和多对一(@ManyToOne)关系,以及如何在实际项目中应用它们。 一、Hibernate注解介绍 Hibernate通过注解简化了Java类与数据库表之间的...

    10_JPA详解_JPA中的一对多双向关联与级联操作.zip

    在JPA中,这种关联可以通过在实体类中定义`@OneToMany`注解来实现。例如,一个学生可以有多个课程,那么在`Student`和`Course`实体中,我们需要在相应的一方定义这个关联。 ```java @Entity public class Student {...

    hibernate常见异常针对于jpa

    @OneToMany(mappedBy = "controlId", fetch = FetchType.LAZY, cascade = {CascadeType.ALL}) private List&lt;ChildEntity&gt; children; ``` - `CascadeType.PERSIST`: 当父实体被保存时,所有关联的子实体也将被...

    JPA中的一对多双向关联与级联操作

    在JPA中,这种关系可以通过在实体类中定义`@OneToMany`注解来实现。这个注解告诉JPA一个实体(例如,一个用户)可以有多个相关的实体(例如,多个订单)。同时,为了实现双向关联,我们需要在另一个实体(订单)上...

    使用Spring Data Jpa为我们提供的@EntityGraph.docx

    为了解决这个问题,JPA提供了@EntityGraph注解,配合Spring Data JPA使用,能够帮助我们优化查询性能,避免N+1问题。 `@EntityGraph`和`@NamedEntityGraph`是JPA提供的两个注解,用于定义和引用实体图。实体图是一...

    使用JPA中@Query 注解实现update 操作方法(必看)

    在Java Persistence API (JPA)中,`@Query`注解是用于自定义查询的一种方式,它可以让我们在Repository接口中直接编写SQL或者HQL(Hibernate Query Language)来执行数据库操作。在本例中,我们将详细探讨如何使用`@...

Global site tag (gtag.js) - Google Analytics