如果阻止Hibernate自动保存已经被修改的实体

用的是ssh2架构。
由于采用了是struts2的ModelDriven, Preparable两种方式
如果entity的赋值时自动完成的。
比如要修改一个用户
页面中的form表单值传递到后台之后会自动个user对象,user对象是从hibernate中获得。
然后才是调用到我的action方法。

如果我在这时将user对象直接保存,则整过过程没有问题
问题出现在,如果我要在我的action代码里判断数据是否合法,这时可能需要再次查询数据库,
问题就出来了,hibernate会先自动将user对象保存到数据库中,是这实际并不是我想要的效果。
我希望是我调用save方法之后才会保存到数据库,而不是通过自动保存的方式。
有什么方法来解决这个问题吗?

0
扫码支付0.1元 ×
其他相关推荐
如何防止hibernate对entity实体的自动保存
Hibernate有一个机制,对于get出来的实体,一旦用setxxx方法改变过属性值,在事务完结前它会很聪明地将其持久化(亦就是保存至数据库),不知道为什么它这样做的原因是什么,毕竟我还没有使用saveorupdate呢,就给我更新了。      比如如下代码: List lvTmp=mTdDao.find(TdMenuCategory.class,"select * from td_me
Hibernate 中对象 set 属性时自动保存入库的问题
我的博客原文地址:http://www.yujunyi.com/java/spring-mvc/601.html 欢迎访问 背景 在某个项目中,通过 Heibernate 查出某个对象后,对属性进行了 set 操作,并没有进行 update 操作,但是在数据中自动保存了。 显然这并不是我想要的,我只是想 set 一下属性,在前端显示,并不想入库,但是 Heibernate 自动保存了。 // ...
Hibernate没写保存方法自动保存
hibernate在每个session里都会做些处理,比如把查询过的对象缓存起来什么,这个时候这些对象的实例是和数据库保持关联的,hibernate会记录session生命周期内所有缓存对象的操作过程,最后都会反映到数据库去,也就是所谓的托管状态,所以才会有自动更新这种问题。只要每次都把查询到的对象用evict(或clear)清除(记得,是每次),那么就不会有托管状态的entity,也就不会有自动
避免 Hibernate 中用get/load方法获取的实体调用set方法后自动更新
1、问题症状描述       最近在处理一个新需求问题,代码的大致逻辑是获取一个实体对象,调用该对象的set方法设置其中的某些字段,然后把修改后的实体作为参数供其他地方调用,根据返回值来决定是否更新这个实体到数据库中。       按照这个思路调用了系统中的getByid方法,结果测试的时候发现,不管返回值是什么,这个实体最终都被更新到数据库中了。好吧,这明显是有问题的....【没有问题的代码
hibernate查询出的实体,set值后,自动更新到数据库
之前做的一个功能,更新订单为取消状态失败,事务回滚,那么订单回滚过后的状态已经是未取消。 但是,事物即使回滚了,但订单状态却被置成了已取消。这个问题困扰了很久。 代码是 OrderInfo orderInfo = orderInfoDao.findByCode(String orderSin);//这底层调用的是hibernate的list(); orderInfo.setOrderSta
Hibernate的方法获取对象后,对象调用set后会自动更新数据库内容的解决办法
例如:Object obj = dao.get(Object_2.classs,id);obj.setName("张三");这种情况下Hibernate下次提交事务的时候会把这个数据库中对应数据更新成set后的。产生原因涉及到Hibernate设计原理,(以下这段话复制地址:http://blog.csdn.net/yang_lover/article/details/45057181)1.瞬态:...
解决hibernate查询后自动保存问题
  hibernate在查询后会自动保存流离态的对象,但有时不需要这样的结果。可用克隆解决   用org.springframework.beans.BeanUtils的copyProperties解决   或者org.apache.commons.beanutils.BeanUtils的cloneBean()方法   但如上的都是浅克隆   ===========   如...
hibernate持久化对象值改变后自动更新的条件
在hibernate中,持久化对象分为三种状态: 1)瞬时态 transient  (临时对象) :无持久化标识OID,未与Session关联 , 2)持久态 persistent  :存在持久化标识OID,与Session关联 3)脱管态 detached (离线对象):存在持久化标识OID,未与Session关联 (session.close) 对象的状态可以相互之间进行转换 直
如何解决 hibernate 自动更新实体类的问题
如何解决 hibernate 自动更新实体类的问题 示例: GrabOrder grabOrder = (GrabOrder)this.grabOrderDao.getCurrentSession().get(GrabOrder.class,grabOrderId); grabOrder.setNickname(TimeHWUtil.getCurrentDateTime());   上...
在解决JPA中 如何防止修改实体的属性后不自动更新数据库问题时遇到的其它问题???...
最近在做一个项目(spingMVC+jpa+mybatis+spring+mysql+...),期间遇到一些棘手的问题,这里贴上关键部分代码如下。 在执行修改的时候根据ID获取指定用户,拿到的实体的状态会不一样呢? 如果将DAO层的findById方法的事务注解  propagation = Propagation.NOT_SUPPORTED  去掉的话,修改时拿到的实体的状态就都是一样的...
hibernate持久态数据自动更新的执行过程
如图,1、通过session查询出的user对象为持久态对象,同时该持久态对象会放到session一级缓存和快照区(副本)中 2、当修改了user也即持久态对象中属性的值,一级缓存中的内容也会随着修改,但一级缓存对应的快照区内容不会修改, 3、最后提交事务时,比较它们的内容,如果不相同,把一级缓存内容更新到数据库,如果相同,不会更新到数据库。
Hibernate entity属性修改导致对象的记录被修改
当通过hibernate获取到entity后 然后在get属性时修改了属性的值后 然后根据id从新到数据库中查询该实体 这是对应的表中该记录也被修改 如果没重新查询修改不修改还不好说 log分析 当修改实体后在次查询执行了三次hibernate语句 首先执行查询语句 接着执行修改语句 访问实体时又执行了次查询语句 原因分析 当通过herbernate查询出entity后 将被缓存在sess
解决使用jpa的时候set实体类属性自动持久化
原文地址http://blog.csdn.net/wangyang1354/article/details/50602658例代码Set<User> users = new HashSet<User>(); User user = null; for(int i = 0; i < 10; i++){ user = new User(); user.setUserNam
hibernate实体类反序列化异常
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.type.SerializationException: could not deserialize org.springframework.web.servlet.Fr...
Hibernate 数据的保存,更新和删除
  数据的保存,更新和删除:   1、Session.save()方法:Session.save()方法用于实体对象的持久化保存,也就是说当执行session.save()方法时会生成对应的insert SQL语句,完成数据的保存。如下面的代码:User user=new User();user.setName(“zx”);Transaction tx=session.be
Hibernate数据持久化及update更新问题
关于Hibernate的Session update问题 Hibernate在进行数据处理时实现了数据的持久化。持久化对象分为三种状态;分为:瞬时态、持久态、托管态;处理持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为为VO(Value Object)   瞬时态 当由new 命令开辟内存空间存储的JAVA 对象称之为瞬时对象。因为这种对象还没有进入
Hibernate如果查询更改了值,没有save,如果提交了仍然会执行update语句(十一)
Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.load(Teacher.class, 1); // t.setName("tttt"); // session.clear(); // t.se
使用saveOrUpdate方法时,若hibernate的session存在了两个具有相同id的不同实体,则会报错
String remindSwitch=request.getParameter("AlertOrNot");         String pushType=request.getParameter("reminderstr");         String earliertime=request.getParameter("earliertime");         String n
关于hibernate持久化所造成的问题以及解决方案
hibernate的持久化是否困扰到你
Hibernate保存的两个方法
Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯。另一方面,save()和 persist()方法还有一个区别:使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);但使用 persist() 方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对
Excel修改后不能自动保存
你碰到过当Excel内容发生变化时,而你不小心或者无意关闭的时候,竟然没有提示,导致你所做的一切功能都白费吗?经过不断的摸索,我的同事终于把这个问题解决了,且听我慢慢道来: 1. 重新安装看看问题是否解决;如果不行请看2; 2. 切换一个用户看看问题是否解决,如果yes,那说明跟登录的用户有关系了,那请看3吧; 3. 那就要打开注册表了。注册表应该都会的哦,然后按照附件中的顺序操作吧,希望...
hibernate实体字段属性改变不更新到数据库
在需要的方法或类名增加@Transactional(readOnly=true)import org.springframework.transaction.annotation.Transactional;
hibernate保存数据后在修改的时候结果是老数据的问题
有的时候没有做对象的序列化。 Hibernate并不要求持久化类必须实现java.io.Serializable接口,但是对于采用分布式结构的Java应用,当Java对象在不同的进程节点之间传输时,这个对象所属的类必须实现Serializable接口,此外,在Java Web应用中,如果希望对HttpSession中存放的Java对象进行持久化,那么这个Java对象所属的类也必须实现Serial
hibernate 实体类 使用自定义枚举
使用UserType首先要弄清楚它的目的。大家知道Hibernate解决的主要是对象数据库阻抗失衡的问题,也就是如何将一个或多个对象保存到一个或多个数据库表格中。这其中有很多方法,其实大部分情况下采用@Embeddable和 @Embedded 就可以解决问题了,只有嵌入对象方式无法满足要求时,或者是Hibernate默认的持久化方式无法满足要求时,才应该考虑UserType。总之记住一 个原则,...
关于hibernate查询后的对象,set后,更新数据库的原因
Hibernate的get和load方法查询出的实体都是持久化对象,拿到该对象后,如果你调用了该对象的set方法,那么在事务递交的时候,Hibernate会把你设置的值自动更新到数据库中。 解决办法:        在获取实体对象后,调用下getHibernateTemplate().evict(entity)方法,该方法的作用是把持久化对象变成托管状态。变成托管状态后,Hibernate就不会再...
hibernate的基本保存操作
紧接着上一篇hibernate的配置,我们来练习hibernate的保存操作; 上一篇《hibernate简介及配置》中我们创建好了UserBasic数据库表实体类。并做了相关的hibernate配置,现在我们来写一个测试用例来进行hibernate保存操作的练习。 第一步:编写测试用例 1.在src目录下创建包com.ballchen.demo; 2.在com
使用Hibernate反向生成实体类(表已存在)
项目中用到hibernate根椐表反向生成实体类的情况,整理如下,如有不足之处欢迎大家指出来,我继续完善。 1.添加jar包     ① hibernate的jar包     ② 数据库的驱动包 2.配置数据库的链接     Window --> Show View --> Db Browser 右击鼠标--> New --> 如下图: 3.添加Hibernate引用
Hibernate开发实践笔记--对象在set属性时更新了数据库问题
之前一直没发现这个问题,后来是因为我的导航栏数据库中数据发生变动后,产生菜单的时候又update了一遍数据库中的数据,使得部分数据值为空了,当时觉得很奇怪,后来仔细看了下log4j打印的日志发现其中有更新的动作,在代码中将数据库中获取到的对象set一个对象属性时,数据库就update了,但是这个问题是怎么产生的呢? 问题重述 Set users = new HashSet(); Use
Hibernate使用过程中,当修改数据后,提示成功,但并没有写入数据库,即使修改成功后多次访问数据库都得到不同的结果的解决方案
hibernate框架是一款很不错的数据库映射操作框架,使用不当会造成各种各样的问题,比如有时候添加一条记录,返回结果表示修改成功,有时候并没有写入数据库,有时即使写入了数据库后,点击前台的查看数据,连续点击请求,每次得到的数据都不同,有时是添加前的数据,有时候是添加后的数据。
Hibernate是否过时了
在Java世界,Hibernate是最引人关注的一个话题。从Gavin King加入EJB3.0 EG,负责制订EJB3.0的持久层规范;到Gavin King非正式退出JDO EG,并且充满个人情绪的攻击JDO2.0规范;到《Hibernate in Action》的发行;再到Hibernate3 Alpha的发布;最后再到最近JBoss 3.0 PR的发布(使用Hibernate3实现Enti
hibernate 具有主外键关系的多表级联保存
这是我在学习使用hibernate进行多表级联保存时,遇到的问题,记录下来以便日后查找。 微博图片表 SayFiles.hbm.xml <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernat
Hibernate实体对象四大状态
首先声明,在Hibernate中,实体对象存在四种状态,而不是三种(相关源码如下,见org.hibernate.event.def.AbstractSaveEventListener.java)。网上流传的hibernate对象三大状态,大概是因为hibernate官方文档没有更新,然后一个接着一个的copy吧,你懂的。
hibernate 获取实体的表名、主键名、列名(转载+修改)
package com.escs.utils; import java.util.Iterator; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.cfg.Configuration; import org.hibernate.mapping.Column; impor
Hibernate三种实体映射,从建表到操作代码
映射关联大致分为三种 : 一对一 ,一对多, 多对多 一.一对一drop table if exists husband; create table husband( id int not null primary key , hname varchar(20) not null collate 'utf8_bin' ); drop table if exists wife; c
Hibernate持久化对象修改id重新保存的办法——Hibernate学习记录二
昨天在工作中遇到一个特殊的场景,点击修改,对一条发布状态的记录进行复制,并生成一个草稿版本,也就是同一条记录的不同状态,也就出现需要从数据库get之后把id置空重新保存,这里出现一个问题,但Hibernate的持久化对象是无法对id进行修改操作的,需要重新new一个全新的对象存储才可以,但Java中的机制,如果采用new Object()并赋值的的方式并不是真的产生一个新的对象,而是引用赋值,即传
【大话Hibernate】Hibernate两种实体关系映射详解
 实体类与数据库之间存在某种映射关系,Hibernate依据这种映射关系完成数据的存取,因此映射关系的配置在Hibernate中是最关键的。Hibernate支持xml配置文件与@注解配置两种方式。xml配置文件是最基础的配置,而@注解是Java的官方JPA(Java Persistence API)提供的。本章分别使用@注解与xml讲解Hibernate的映射配置。一、实体类映射: 从Java的...
Hibernate使用get(id)获得的对象进行更改会在事务提交时持久化到数据库中(即使不用update和merge方法)...
今天同事发现个问题,从使用get(id)的形式从数据库中获得对象,改变对象的ID,在没有使用update和merge方法的情况下竟然保存到数据库中了。当时很不解,后来就在网上搜,才知道是hibernate把get(id)获得的对象称为持久化对象,对其做的更改会在事务提交后保存到数据库中。也知道需要了解hibernate对象的三种状态了,临时状态,持久化状态和游离态。下面是在百度知道上搜到的答案,...
AutoCAD .Net 禁止图元被删除
禁止图元被用户删除可以通过 ObjectOverrule 实现。 以下代码: 1、命令 AddEraseOverrule 创建两个图元并禁止被删除。 2、命令 RemoveEraseOverrule 移除删除限制。
hibernate 自动建表 实体类继承父类 父类有主键 启动失败
项目中我们经常把实体类公共的属性抽取出来(主键ID,创建时间crateTime等),抽取成一个BasedModel,然后让有需要的实体类去继承。 package com.test.demo.model; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Column; import jav...
Hibernate中sql查询返回不受Hibernate管理的实体
Hibernate查询有好多种方法,当我们需要查找自己构建的实体时,需要使用session.createSQLQuery(sql)方法查找实体,但这样只能返回由Hibernate管理的实体,即生成数据库表的那些实体,为了返回任意的自定义的实体,我们需要这样做: sess.createSQLQuery("SELECT NAME,BIRTHDATE FROM CATS") .setResultTra
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 如果学习java 如果学习区块链