-
请教一个Swing+Spring+Hibernate 架构下 session 的管理问题5
现在做一个 基于 Swing Spring Hibernate 的项目
遇到一个关于 session的问题
我有一长表 A ,它分别又有子表 b c 关系是一对多的,我对A做级联删除 和 保存 的时候 B,b 表中的数据也都是正确的
但是 当我对A表做级联更新的时候 bc 表中的数据就有问题 ,多的一端是是一个SET 集合 我每次要更新的是集合中的一个对象
当我把这个对象从SET里取出来更新属性之后
用HibernateTemplat 的 merge方法对A表进行级联更新操作 ,查看数据库BC表 发现之前前那条记录没有被更新,而是又新加入了两条新的数据 数据的值一样就是我更新的值 等于是那个SET里面 又新加入了两个对象 而我本意是要更新那个SET里的那个对象的
最让我不理解的是为什么 每次 更新 他会加入两条 !
我现在试着把MERGE 方法 换成 update 方法做级联更新 抛出如下异常
不知道我把问题说清楚了没 请高手明示啊!
org.springframework.orm.hibernate3.HibernateSystemException: Illegal attempt to associate a collection with two open sessions; nested exception is org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions2008年6月24日 11:36
3个答案 按时间排序 按投票排序
-
从我个人使用经验上看,使用级联更新导致数据丢失、覆盖、抛出异常等问题比比皆是、原因复杂。而且并不是时时都需要级联更新,有时不想级联,但配置文件如此,没有办法更改级联方式。所以现在项目上不使用级联,程序自己记住哪些记录被更改过,自己进行更新。除非有最佳实践,否则尽可能的使用saveOrUpdate,save,update。概念既清晰又不会有那么多调试的问题。
2008年6月24日 17:34
-
merge是根据id来确定这个entry是进行保存还是新增,所以调用这个方法如果该Session中已经有相同id的对象,就会把数据merge进来,而saveorupdate则会报错。
所以想问一下你的Set里面的对象的id是不是空的,所以导致新增了2条数据。但如果这样的话,之前关联上的数据会被认为已经删除,外键会被设为空。 你可以检查一下数据库,看一下更新以前的那些条目的外键是否为空了。
如果是这个原因的话,那么保证有正确的id,就应该可以更新。
至于删除的数据还保存,可能设置一下delete-orphan就可以删除,而不是只把外键设为空。
要是不是这个原因,而是double了数据,2条变成4条,那问题就相当诡异了。
2008年6月24日 16:07
相关推荐
Spring是企业级Java应用的事实标准,它提供了一个全面的编程和配置模型,涵盖了依赖注入、AOP(面向切面编程)、事务管理、数据访问等核心功能。Spring MVC是其Web开发的一部分,结合了Struts和Spring的优点。课程...
在Java Web开发中,这一架构的具体实现可以是SUN的桌面应用(如Swing、AWT)、基本Web应用(JSP、Servlet、JDBC)以及高级Web应用(JSF、SessionBean、Persistence)。而在国内流行的开源框架中,Struts、Spring和...
在服务层,我们可以定义一个方法,使用Hibernate的Session来查询层次化的数据。例如,如果数据是一棵树状的组织结构,我们可以编写一个递归函数来加载整个树。这通常涉及使用JOIN操作来获取所有相关联的子节点。 在...
这个项目主要涉及了JavaMail API和Spring框架(SSH架构中的S),为用户提供邮件的发送、接收和管理功能。以下是对这些知识点的详细解释: 1. **JavaMail API**:JavaMail API是Java平台上的一个标准API,用于处理...
2. **继承**:继承允许一个类(子类)继承另一个类(父类)的特性和行为。这有助于代码复用和减少冗余代码。继承还提供了层次化的分类结构,使得代码更加灵活和易于扩展。 3. **多态**:多态是指允许不同类的对象对...
SSH(Struts、Spring、Hibernate)是Java Web开发中常用的一种三层架构模式,它结合了Struts的MVC设计模式、Spring的依赖注入以及Hibernate的对象关系映射技术,提供了高效且灵活的开发环境。在搭建SSH架构时,需要...
这是一个基于Java语言开发的SQL信用卡管理系统源代码实例,旨在帮助开发者了解如何在实际项目中运用Java和SQL技术来实现一个完整的管理系统。这个系统可能包含了用户管理、信用卡申请、账单查询、还款提醒等功能,...
Java 实现的学生管理系统是一个典型的软件开发项目,它涵盖了多种技术和概念。主要焦点在于使用Java编程语言和Hibernate ORM框架来操作数据库。以下是对这个系统的一些详细解释: 1. **Java编程语言**:Java是一种...
在这一期的JavaEye论坛热点月报中,涵盖了2008年12月期间的各种IT技术热点,包括JavaFX、Swing、Ruby、AJAX以及项目管理和框架应用等多个领域。以下是其中的一些主要知识点: 1. **JavaFX** - JavaFX是Sun ...
8. **Spring+Struts 2+Hibernate整合**:介绍这三大框架如何协同工作,提供一个完整的MVC解决方案,以及在Myeclipse中的实践步骤。 9. **EJB开发**:讲解Enterprise JavaBeans(EJB)的概念,包括会话bean、消息...
1. **第十一章 开发Spring+Struts+Hibernate应用**:这一章主要讲解如何在MyEclipse中整合三大主流JavaEE框架——Spring、Struts和Hibernate。Spring作为核心框架,提供依赖注入和面向切面编程;Struts处理MVC架构中...
Spring作为依赖注入和面向切面编程的框架,提供了一个全面的应用架构;Struts2则是MVC模式的实现,负责控制应用程序的流程;Hibernate则作为持久层框架,简化了数据库操作。这三者的整合可以构建出高效、可维护的...
学生管理系统是一种常见的信息管理软件,它用于高效地管理和跟踪学生的个人信息、成绩、出勤等数据。在本文中,我们将深入探讨两个主流编程语言——PHP和Java实现的学生管理系统源码,旨在帮助开发者理解和构建类似...
- **spring.jar**:这是一个包含Spring框架大部分功能的单一JAR包,但不包括一些特定功能的JAR包,如mock.jar、aspects.jar、spring-portlet.jar以及spring-hibernate2.jar。 - **spring-core.jar**:Spring框架的...
这些项目包括了企业内部通讯系统、手机游戏开发、企业门户新闻网、进销存管理、电子商城、医药管理、图书管理、BBS论坛、人事管理和酒店管理等多个领域,涵盖了Java开发中的重要知识点。 1. **EQ企业内部通讯系统**...
9. **Spring框架**:理解IoC(Inversion of Control)和DI(Dependency Injection),Spring的配置,Spring架构,AOP以及Spring AOP,声明式事务管理,Spring与Hibernate的集成,Web支持,Bean的作用域。 10. **EJB...
在本项目中,“基于Java的超市积分管理系统设计与代码实现”是一个典型的软件开发案例,它主要涉及了Java编程语言以及数据库技术,旨在为超市提供一套完整的积分管理解决方案。以下将详细解析该系统的相关知识点。 ...
包括Swing GUI组件、JDBC数据库连接、Java Web技术、MVC模式、多层架构设计、XML解析、Linux操作系统应用、Hibernate对象关系映射(ORM)框架、Spring轻量级容器、EJB企业级服务构件等。 根据文件提供的内容,我们...
在Java中,这可能涉及到Session管理和认证框架,如Spring Security。 2. **图书信息管理**:添加、删除、修改图书信息,包括书名、作者、出版社、ISBN等。这需要与数据库进行交互,可能使用到JDBC(Java Database ...
- **项目实战**:通过一个具体项目(如协同办公系统)来综合运用Struts、Spring、Hibernate技术。 - **AJAX** - **核心内容**:理解Ajax的核心思想。 - **工作流程**:掌握Ajax的工作流程。 - **经典案例**:...