Hql查询类似于hibernate中的SaveOrUpdate

时间:2013-03-06 07:16:30

标签: java sql spring hibernate hql

我们在使用Session时在Hibernate中有saveOrUpdate(Object)函数,因为我们不必检查是执行保存还是更新,因此它更容易。但insert(Object)update(Object)函数仅用于无状态会话,我需要使用无状态会话,因为我使用了数十万条记录,而休眠正在耗尽内存。有没有办法在无状态会话中复制saveOrUpdate(Object)功能。或者无论如何通过使用Hql查询而不是使用object来通过hibernate来完成它。

1 个答案:

答案 0 :(得分:0)

根据StatelessSession JavaDoc

  

无状态会话也不实现第一级缓存   与任何二级缓存交互,也不实现   事务性后写或自动脏检查,也不做   操作级联到关联的实例。集合被忽略   无国籍的会议。通过无状态会话执行的操作   绕过Hibernate的事件模型和拦截器。无国籍会议   由于缺少a,很容易受到数据混叠效应的影响   第一级缓存

它不维护第一级缓存,因此不知道对象的当前状态(Transient,Persistent,Detached或Removed),因此无法做出有意识的决定。您可以使用HQL进行查询,以查找数据库中是否存在相同的记录,并将相应的方法调用insert()update()。但这是代价高昂的。

如果要更新或插入十万条记录,最好使用基本的JDBC而不是休眠。这将解决你的记忆问题。