`
terryyang
  • 浏览: 1402 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

多对一关联关系,一方被删除,多方加载数据不一致的问题

阅读更多
一个典型的应用系统,其中主要的实体(例如Account)一般都有createdUser和lastModifiedUser这样的字段,用以跟踪该实体被那个用户创建和最后修改,我们用hibernate处理这个关系的时候一般是在实体端用一个多对一的单项关联来引用User
<many-to-one class="User" name="createdUser" column="created_user"/>
<many-to-one class="User" name="lastModifiedUser"  column="last_modified_user"/>


如果系统某个用户被删除,这时候会有一个问题:
       1. 实体引用的User的这两个字段已经不存在,hibernate再加载这个实体时就会报引用实体不存在的异常。
这个问题的一个解决办法是在many-to-one映射中加入not-found="ignore",这样就不会报异常了,但引入了另一个问题:
        2.加载实体的时候,不管关联的createdUser和lastModifiedUser存不存在,hibernate都会自动发送一条sql去探测该对象存不存在,这样就多发送了两条sql,如果是列表加载50条记录,就要多发送2×50条sql,严重影响了性能。

请各位支支招,该类问题如何解决。
分享到:
评论
6 楼 fb777 2008-01-24  
=.= 删除客户的时候为什么不把关联删除
5 楼 zjian0573 2008-01-24  
我也遇到了一样的问题  参考夏昕的hibernate开发手册
解决方法是
方法1、在映射文件中手动去删除关联的外健。
方法2、改成双向关联,即在关联方“many to one”的"one"一方增加一个"one to many"。
方法1简单,但是每次ant之后要去手动改, 方法2 又是多了一步代码的编写,意味着关联方要多封装一个属性,就像lz的例子中,user对象中还要增加一个account对象的集合,增加一个"one to many"映射。 
所以又没有什么折中的办法呢?
4 楼 泡泡 2008-01-22  
被FK约束了的,怎么Delete得掉?
3 楼 evanerv0079 2008-01-20  
在hbm和模型中删除相应字段不就行了吗
2 楼 ice123456 2007-12-24  
terryyang 写道
加载实体,不管关联的createdUser和lastModifiedUser存不存在,hibernate都会自动发送一条sql去探测该对象存不存在,这样就多发送了两条sql,如果是列表加载50条记录,就要多发送2×50条sql,严重影响了性能。[/b]

请各位支支招,该类问题如何解决。

你自己可以选择需不需要加载`或只放id里面``没有必要每次去加载,如果这些问题没有处理好`,建议你别用hibernate,小心客户骂人
1 楼 ice123456 2007-12-24  
这根本不是问题。当你删除一个用户的时候,应该自然去删除于它相关的数据

相关推荐

    传智播客hibernate教程_保存多对一关联关系的更进一步分析

    本教程“传智播客hibernate教程_保存多对一关联关系的更进一步分析”深入探讨了如何在Hibernate中处理多对一的关联关系。这种关联意味着一个实体(多方)可以与多个其他实体(一方)相关联,而每个其他实体只与一个...

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

    本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...

    Hibernate关联关系疑问

    为了防止数据冗余,通常会配置 cascade属性,以决定当一方被删除时,是否也删除相关联的多方对象。 3. **多对一关联(ManyToOne)**:与一对一关联相反,这里多个实体与单个实体关联。@ManyToOne注解用于定义这种...

    hibernate知识复习三:关联映射:一对多/多对一

    1. 定义:与一对多相反,如果一个表中的记录可以被另一个表中的多个记录所对应,即为多对一关系。在Java对象中,这通常表现为一方实体持有多方实体的集合。 2. 实现方式:在多的一方实体上添加`@ManyToOne`注解,并...

    Hibernate一对多关联实例

    在Java的持久化框架Hibernate中,一对多关联是常见的实体关系映射,它模拟了数据库中的外键关联。本文将详细解析" Hibernate一对多关联实例 ",并涵盖关联的保存(save)、删除(delete)、查询(select)和更新(update)...

    Hibernate 一对一,一对多,多对多例子

    “Hibernate 一对一,一对多,多对多例子” 指的是使用Hibernate框架实现数据库中不同关联关系的示例。Hibernate是一个Java持久化框架,它提供了对象关系映射(ORM)功能,使得开发人员可以方便地在Java对象和关系...

    JPA一对多和多对一关系

    **JPA一对多和多对一关系详解** Java Persistence API(JPA)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者可以使用面向对象的方式来操作数据库。在JPA中,实体间的关系映射是核心概念之一,...

    hibernate单边多对一关系

    6. **集合类型**:在多对一关系中,多方实体通常会用一个集合(如`Set`、`List`)来保存所有单方实体的引用,因为一个多方可能有多个单方实体与之关联。集合类型的映射可以使用`@ElementCollection`或`@OneToMany`,...

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

    在Java的持久化框架Hibernate中,一对多(Many-to-One)和多对一(One-to-Many)的关系映射是数据库关系模型中的常见关联类型。本文将深入探讨这两种关联方式在使用Hibernate时的配置,包括基于注解(Annotation)和...

    Hibernate之一对多关联

    在处理一对多关联时,需要考虑性能优化、事务管理和数据一致性等问题。通过合理的设计和配置,Hibernate能帮助我们更加高效地进行数据库操作。在阅读上述博文(链接已提供)后,你将更深入地理解Hibernate中的一对多...

    ibatis实战之一对多关联(源代码)

    在关系型数据库中,一对多关联是非常常见的一种数据关系,例如一个用户可以拥有多个订单,一个部门可以包含多个员工等。在iBatis中,我们可以通过配置XML映射文件来实现这种关联。 1. **一对多关联映射原理** 一对...

    Hibernate一对多单向关联映射

    在Java的持久化框架Hibernate中,一对多关系是常见的实体关联映射方式,它表示一个实体可以与多个其他实体相对应。本篇文章将深入探讨Hibernate中一对多单向关联映射的概念、配置以及其实现方法。 一、概念理解 一...

    Hibernate一对多、一对一、多对多映射之Annotation篇.doc

    在Java持久化框架Hibernate中,Annotation注解是用于声明对象...通过`@OneToMany`、`@ManyToOne`、`@OneToOne`和`@ManyToMany`注解,我们可以轻松地配置一对一、一对多、多对多的关系,并控制数据加载策略和关系维护。

    hibernate如何实现一对多的关联源代码

    而`@ManyToOne`表示多对一关系,`@JoinColumn`指定了外键列名。 ### 2. 源代码实现 在实际应用中,我们可能需要在服务层或控制器层处理一对多的增删查改操作。以下是一个简单的例子: ```java @Service public ...

    hibernate自身关联一对多实例(树形结构)

    在一对多关联中,"一方"实体通常有一个或多个"多方"实体的引用,而"多方"实体则拥有一个对"一方"实体的引用。在树形结构中,这种关联通常表现为父节点与子节点的关系。例如,公司部门是一个部门可以有多个员工的示例...

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

    3. 一对多关联通常需要设置`fetch = FetchType.LAZY`,以避免加载过多数据(懒加载)。 总结,本资料包主要探讨了JPA中一对多双向关联的配置以及级联操作的使用,这些都是在实际开发中处理复杂对象关系时不可或缺的...

    jpa--10.单向一对多

    这种关联意味着一个实体(“一方”)可以与多个其他实体(“多方”)相关联,而反过来,多方并不知道有一方存在,即没有反向引用。在实际应用中,这种关系常常出现在如一个用户可以有多个订单,或者一个部门可以有多...

    mybatis之多对多

    6. **级联操作(Cascading)**:在保存、更新或删除数据时,MyBatis可以通过设置`cascade`属性来执行级联操作,确保多对多关联关系的完整性和一致性。 7. **自动生成主键(Auto-generating Primary Keys)**:在...

    hibernate一对多实例

    在这个“hibernate一对多实例”中,我们将深入探讨如何在Hibernate中实现一对多的关系,这是一种常见的关联类型,其中一方实体可以与多方实体相对应。 一、Hibernate一对多关系 在数据库设计中,一对多关系表示一...

Global site tag (gtag.js) - Google Analytics