hibernate 不关闭session,调用什么方法可以取消对象的持久化状态呢?
有这样的需求:一个表的字段有上百个,我需要复制一条记录,修改其中几个字段,再重新插入生成一条新记录;实现:用hibernate查出一个对象来,修改完后,再save回数据库...
有这样的需求:一个表的字段有上百个,我需要复制一条记录,修改其中几个字段,再重新插入生成一条新记录;
实现:用hibernate查出一个对象来,修改完后,再save回数据库;
问题:我需要把查出来的对象先取消持久化状态,然后再修改数据,再save回数据库生成一条新记录,但是因为我有一连串事务,不能通过关闭session来取消持久化,hibernate到底有没有提供什么方法(函数)给我们去调用来取消持久化呢?在网上找了也没发现答案,是太简单不值一提还是什么呢?请高手指点! 展开
实现:用hibernate查出一个对象来,修改完后,再save回数据库;
问题:我需要把查出来的对象先取消持久化状态,然后再修改数据,再save回数据库生成一条新记录,但是因为我有一连串事务,不能通过关闭session来取消持久化,hibernate到底有没有提供什么方法(函数)给我们去调用来取消持久化呢?在网上找了也没发现答案,是太简单不值一提还是什么呢?请高手指点! 展开
3个回答
展开全部
不需要取消持久化状态,重新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提供了这方面的支持
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提供了这方面的支持
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
flush()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询