1

我们saveOrUpdate(Object)在使用 Session 时在 Hibernate 中具有功能,并且更容易,因为我们不必检查是否执行保存或更新。但是insert(Object)andupdate(Object)函数仅适用于无状态会话,我需要使用无状态会话,因为我处理数十万条记录并且休眠正在消耗内存。有什么方法可以复制saveOrUpdate(Object)无状态会话中的功能。或者无论如何通过使用 Hql 查询而不是使用对象通过休眠来完成它。

4

1 回答 1

0

根据 StatelessSession JavaDoc

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

它不维护一级缓存,因此不知道对象的当前状态(瞬态、持久、分离或删除),因此无法做出有意识的决定。您可以使用 HQL 查询数据库中是否存在相同的记录,并调用相应的方法insert()update()。但这是代价高昂的。

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

于 2013-03-07T09:49:24.030 回答