hibernate表记录更新引发连接表数据被删问题

问题描述

我的项目中有两个表document、level,它们之间通过连接表实现关联,映射文件如下:表document<hibernate-mapping> <class name="com.unionmon.knowledge.model.KleDocument" table="KLE_DOCUMENT" schema="UFLOW"> <id name="kleDocumentId" type="java.lang.Long"> <column name="KLE_DOCUMENT_ID" precision="22" scale="0" /> <generator class="native" /> </id> <join table="KLE_DOC_SECRET_UNION" optional="true"> <key column="KLE_DOCUMENT_ID" unique="true"/> <many-to-one name="secretLev" column="KLE_SECRET_LEVEL_ID" not-null="true"/></join> </class></hibernate-mapping> 表level:<hibernate-mapping> <class name="com.unionmon.knowledge.model.KleSecretLevel" table="KLE_SECRET_LEVEL" schema="UFLOW"> <id name="kleSecretLevelId" type="java.lang.Long"> <column name="KLE_SECRET_LEVEL_ID" precision="22" scale="0" /> <generator class="native"></generator> </id> <set name="kleDocs" table="KLE_DOC_SECRET_UNION"> <key column="KLE_SECRET_LEVEL_ID"/> <many-to-many column="KLE_DOCUMENT_ID" class="com.unionmon.knowledge.model.KleDocument"/> </set> </class></hibernate-mapping> 表document和level的连接表<hibernate-mapping package="com.unionmon.knowledge.model"> <class name="KleDocSecretUnion" table="KLE_DOC_SECRET_UNION" schema="UFLOW"> <many-to-one name="kleSecretLevel" class="KleSecretLevel" fetch="select"> <column name="KLE_SECRET_LEVEL_ID" precision="22" scale="0" /> </many-to-one> <many-to-one name="kleDocument" class="KleDocument" fetch="select"> <column name="KLE_DOCUMENT_ID" precision="22" scale="0" /> </many-to-one> </class></hibernate-mapping> 问题出现在当我更新level表中的某条记录时(比如该记录编号为level_id),发现hibernate有一条语句删除了连接表中所有KLE_SECRET_LEVEL_ID字段值为level_id的记录,我的service层代码如下:public String editLevel(KleSecretLevel new_level, long id,long doc_id){new_level.setKleDocumentId(doc_id);new_level.setKleSecretLevelId(id);this.secretDao.save(new_level);return "{success: true, msg: '修改成功 '}";}  dao层代码如下:public T save(T object) { return (T) super.getHibernateTemplate().merge(object); } 我查阅了hibernate的官方文档和对此错误进行了Google,实在找不到程序不妥的地方,烦请各位解下小弟疑惑。

解决方案

因为你new_level对象里关联的对象为空,Hibernate就会认为它没有关联对象,所以会把关联表里的记录删掉。你要保证关联的对象不为空才行,比如先把要更新的记录查查出来,这样new_level对象里所有的字段就都和数据库里的值一样了,然后再修改相关的字段,然后整个对象执行update

时间: 2024-08-30 17:10:37

hibernate表记录更新引发连接表数据被删问题的相关文章

关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放

问题描述 关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放 关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放,这个有可能是数据还没插入完或者插完了锁没有被释放,导致下一个更新操作不能执行,等待超时,这个情况出现在操作数据量大的时候!这个情况有哪几种解决方式? [http-bio-8080-exec-3] [SQLErrorCodesFactory.:126] SQLErrorCodes loaded: [DB2 Derb

access数据库-Access2010 如何将窗体中未绑定文本框的输入值更新到对应的数据表中

问题描述 Access2010 如何将窗体中未绑定文本框的输入值更新到对应的数据表中 前提:创建了个数据表A(栏1,栏2,栏3),用此表生成了窗体A,表A中每项记录跟窗体A相对应,一边有记录更新时,另一边自动更新.现在窗体A上创建了一个未绑定的文本框,用于输入当前用户名. 目的:当在窗口更新记录时,可以将当前用户名一起保存到数据表中(已在表A中创建 栏4:当前用户). 请问:如何在窗体A上手动录入一组数据记录时,将文本框中的当前用户名更新到数据表A中. 刚接触Access,不太了解,多谢了.

删除-SSH继集成开发中,hibernate基于连接表多对多关系问题

问题描述 SSH继集成开发中,hibernate基于连接表多对多关系问题 在连续插入2组数据时,第二组数据会将的第一组数据删除在插入第二组数据,这导致第一组数据丢失,我觉的应该是缓存的问题,怎么解决? 解决方案 插第二组数据时,要将Admin_User类去持久化

SQL同时更新两张表中关联数据方法

文章标题比较难理解,先让我举个例子,解释一下要实现的操作. 有两张表,t_statistics.t_add,如下 t_statistics数据 t_add数据 现在需要将 t_statistics 表 addtotal 字段的值减去 t_add 表 total 字段的值,条件是两者有相同的 id,所以正确的操作之后,t_add 记录无变化,t_statistics 记录如下 测试的数据库为Oracle(Oracle Database 10g Enterprise Edition Release

hibernate3.3 更新表记录

问题描述 hibernate3.3 更新表记录 添加删除都没有问题,就是更新的时候跳出 792 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured!

hibernate 多对多删除 中间表记录还在

问题描述 请问一下hibernate 多对多删除一方的记录的时候,为什么中间表的记录没有跟着删除呢,但是我在存入的时候,中间表记录就自动生成了啊 问题补充:UserGroup表private Set<Paper> papers = new HashSet<Paper>();@ManyToMany@JoinTable(name="tm_paper_usergroup",joinColumns={@JoinColumn(name="usergroupid&

Hibernate单向1-1含连接表映射实例详解

Hibernate单向1-1映射范例 其实 Many-to-one 和 one-to-one 非常相似,只需要在 <many-to-one> 的尖括号中添加 unique="true"即可 1.hibernate.cfg.xml  代码如下 复制代码 <!DOCTYPE hibernate-configuration PUBLIC         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

更新表-sql 如何在建立一个存储过程时更新两张表的数据?

问题描述 sql 如何在建立一个存储过程时更新两张表的数据? create proc proc2 ( @OrderID int, @BookID varchar(20),--更新 orderInfo quantity:更新 orderSheet payment @BookStock int ) as update orderSheet set payment = b.newpay FROM orderInfo,orderSheet,(select (payment + price * @Book

不同结构的表数据新增-SQL 不同表结构的两张表A和B,往表中新增表B的数据,判断条件如果表A中不存在B中的记录

问题描述 SQL 不同表结构的两张表A和B,往表中新增表B的数据,判断条件如果表A中不存在B中的记录 insert into A(no,name,status)values ( select no,name,'Add' from B where B.no not in (select no from A) ) A(no,name,status) B(no,name) no是主键,上面这么写报错,请问要怎么改 ? 解决方案 insert into A(no,name,status) select