hibernate 不关闭session,调用什么方法可以取消对象的持久化状态呢?

有这样的需求:一个表的字段有上百个,我需要复制一条记录,修改其中几个字段,再重新插入生成一条新记录;实现:用hibernate查出一个对象来,修改完后,再save回数据库... 有这样的需求:一个表的字段有上百个,我需要复制一条记录,修改其中几个字段,再重新插入生成一条新记录;
实现:用hibernate查出一个对象来,修改完后,再save回数据库;
问题:我需要把查出来的对象先取消持久化状态,然后再修改数据,再save回数据库生成一条新记录,但是因为我有一连串事务,不能通过关闭session来取消持久化,hibernate到底有没有提供什么方法(函数)给我们去调用来取消持久化呢?在网上找了也没发现答案,是太简单不值一提还是什么呢?请高手指点!
展开
 我来答
ahyyxx222
2011-06-30 · TA获得超过2532个赞
知道小有建树答主
回答量:1405
采纳率:33%
帮助的人:1205万
展开全部
不需要取消持久化状态,重新new一个对象,把值set过去使用一些开源包的复制字段值的方法,再改掉一部分,就得到一个新的可以save的对象了
更多追问追答
追问
我现在用的就是你说的这种方法,但是我想知道hibernate到底有没有提供那种功能,我查过hibernate3的API,也没发现有哪个方法提供那种功能,难道真的没有??
追答
对象通常只有在session关闭或被删除时才会从持久态变为其他状态
你可以试下用evcit方法从session中移除对象,之后如果对象还在,你就成功了,但我想这样对象会被回收掉
匿名用户
2011-07-01
展开全部
.Hibernate Session缓存

1.数据库级缓存:这级缓存是最高效和安全的,但不同的数据库可管理的层次并不一样,比如,在ORACLE中,可以在建表时指定将整个表置于缓存当中。

2.Session缓存:在一个Hibernate Session有效,这级缓存的可干预性不强,大多于Hibernate自动管理,但它提供清除缓存的方法,这在大批量增加/更新操作是有效的。比如,同时增加十万条记录,按常规方式进行,很可能会发现OutofMemeroy的异常,这时可能需要手动清除这一级缓存:Session.evict以及 Session.clear

3.应用缓存:在一个SessionFACTORY中有效,因此也是优化的重中之重,因此,各类策略也考虑的较多,在将数据放入这一级缓存之前,需要考虑一些前提条件:
◆数据不会被第三方修改(比如,是否有另一个应用也在修改这些数据?)
◆数据不会太大
◆数据不会频繁更新(否则使用CACHE可能适得其反)
◆数据会被频繁查询
◆数据不是关键数据(如涉及钱,安全等方面的问题)。

Hibernate Session缓存有几种形式,可以在映射文件中配置:read-only(只读,适用于很少变更的静态数据/历史数据),nonstrict-read- write,read-write(比较普遍的形式,效率一般),transactional(JTA中,且支持的缓存产品较少)

4.分布式缓存:同3)的配置一样,只是缓存产品的选用不同,在目前的Hibernate中可供选择的不多,oscache, jboss cache,目前的大多数项目,对它们的用于集群的使用(特别是关键交易系统)都持保守态度。在集群环境中,只利用数据库级的缓存是最安全的。

三.延迟加载
◆实体延迟加载:通过使用动态代理实现
◆集合延迟加载:通过实现自有的SET/LIST,Hibernate提供了这方面的支持
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guge888
2011-06-30 · TA获得超过100个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:108万
展开全部
flush()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式