最近的开发一直在持久层周围,虽然做hibernate也有一段时间了,但是随着数据库表的增加,遇到了一些以前没有碰到过的问题。其中有一个问题就是对集合的共享参照问题(found shared references to a collection)具体是这样的:
数据库表的关系如下:
关系是这样的ALARMINFO表通过交叉表ALARMAUDIT和AUDITINFO建立多对多关系,ALARMINFO自身是一对多的关系,ALARMINFO表和ALARMCOMPRESS表是多对一的关系。
在这里抛开ALARMCOMPRESS表不讨论,对象之间的关系是双向关联,目标是这样的:生成一个新的ALARMINFO对象alarmInfo,该对象子集合alarmInfos已经获得,将其赋值给该对象alarmInfo,而该对象的auditInfos的赋值是这样的:将alarmInfos的其中一个元素对应的多个auditInfos赋值给auditInfos。
那这样的话最终save对象alarmInfo就会产生共享参照,即alarmInfo对auditInfos的参照,alarmInfo的子集合alarmInfos中的一个元素对auditInfos的参照。
有什么方法能够在加载alarmInfos的其中一个元素的auditInfos集合,并赋值给alarmInfo后,使得该集合再次恢复到未加载前的lazy状态呢,这样就可以避免对集合的共享参照问题。或者还有其他的方法。
java 代码
- public class AlarmInfo{
- private Set alarmInfos;
- private Set auditInfos;
- private AlarmCompress alarmCompress;
- }
-
- public class AuditInfo{
- private Set alarmInfos;
- }
-
- public class AlarmCompress{
- private Set alarmInfos;
- }
分享到:
相关推荐
在Hibernate中,我们可以使用`@OneToOne`和`@PrimaryKeyJoinColumn`注解来实现这种关联。`@OneToOne`用于声明一对一的关联,而`@PrimaryKeyJoinColumn`则指定主键同时也是外键的列。 例如,假设我们有两个实体类,...
Hibernate帮助文档集合Hibernate帮助文档集合Hibernate帮助文档集合Hibernate帮助文档集合Hibernate帮助文档集合Hibernate帮助文档集合Hibernate帮助文档集合Hibernate帮助文档集合Hibernate帮助文档集合Hibernate...
首先,集合映射是Hibernate中处理一对多、多对多关系的核心机制。它允许我们将一个实体对象与多个相关对象关联起来,这些相关对象可以存储在一个集合中。在Java中,常见的集合类型有List、Set、Map等,它们在...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便更好地管理和操作数据。这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象模型中的集合类,如List、Set、Map等。这允许我们在Java代码中操作对象集合,而Hibernate负责处理底层的SQL查询和数据存储。本文将深入探讨`...
这份文档详细阐述了Hibernate中最基础也是最核心的操作:CRUD(Create、Read、Update、Delete)以及动态查询和分页。CRUD操作是数据库管理的基础,Hibernate通过提供简单的API使得开发者能够轻松地对数据库进行这些...
在Hibernate中,集合映射是指将数据库中的表与Java集合对象(如List、Set等)进行关联,方便对一组相关数据进行操作。 "bag"是Hibernate中的一种集合类型,表示无序的、可重复的对象集合。在数据库层面,这通常对应...
在Hibernate中,可以通过`<set>`、`<list>`或`<map>`标签来实现这种映射。例如,假设我们有User和Order两个实体,一个User可以有多个Order,那么在User实体中,我们会定义一个Order类型的集合,并使用`<set>`标签...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...
1. **集合类型**:在Hibernate中,集合类型通常有List、Set、Map和Bag等。List保证元素顺序,可能有重复元素;Set不允许有重复元素,不保证元素顺序;Map则存储键值对,其中键是唯一的;Bag则与List类似,但不保证...
首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体(例如,student)可能与多个相关实体(如Score)有关系,这通常表现为集合形式。在Hibernate中,我们可以使用集合类(如List、Set、Map等)...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表与Java对象的集合属性关联的过程。List集合映射是其中常见的一种方式,它允许我们将数据库中的一组相关记录映射到Java对象的List列表中。这种映射机制使得...
hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate-search-analyzers-4.1.1.Final-sources.jar hibernate-search-engine-4.1.1.Final-sources.jar hibernate-search-orm-4.1.1.Final-sources.jar hibernate-...
这部分将介绍如何在Hibernate中执行原生SQL查询。 14. 性能提升:本部分可能包括如何通过合理的配置、查询优化、缓存使用等手段提升Hibernate应用的性能。 15. 工具箱指南:Hibernate提供了许多工具类和实用方法来...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了与数据库之间的交互。`HibernateSessionFactory` 类是Hibernate应用中常见的一个工具类,用于管理和提供与当前线程相关的Session实例。让...
`Hibernate Validator`是一个开放源代码项目,由Hibernate团队维护,它基于JSR 303(Bean Validation 1.0)和JSR 349(Bean Validation 1.1)标准,用于在Java应用中执行对象级验证。 `Hibernate Validator`的主要...
在Java持久化框架Hibernate中,映射集合属性是常见的需求,特别是对于那些具有一对多、多对多关系的实体对象。这里的"List"是Java集合框架中的一个接口,用于存储一组有序的元素,而在Hibernate中,它常用来映射...
在Hibernate中,List集合常用于存储一对多(One-to-Many)或多对多(Many-to-Many)的关系,例如用户和他们的订单、学生和课程等。 在查询时,我们可能需要根据特定条件筛选出List集合中的元素。这可以通过HQL...
在给定的文档中,我们看到一个例子,展示了如何在 Hibernate 中配置一个具有集合属性的实体类 `Person`,以及如何通过映射文件启用延迟加载。`Person` 类拥有一个 `Set<Address>` 类型的 `addresses` 属性,表示个人...
在Java的持久化框架Hibernate中,映射关系是数据库表与Java对象之间的桥梁,它使得对象模型能够直接操作数据库中的数据。本主题将深入探讨双向多对多、一对多和一对一映射的概念及其在集合中的应用。 首先,我们来...