我们在使用Session时在Hibernate中有saveOrUpdate(Object)
函数,因为我们不必检查是执行保存还是更新,因此它更容易。但insert(Object)
和update(Object)
函数仅用于无状态会话,我需要使用无状态会话,因为我使用了数十万条记录,而休眠正在耗尽内存。有没有办法在无状态会话中复制saveOrUpdate(Object)
功能。或者无论如何通过使用Hql查询而不是使用object来通过hibernate来完成它。
答案 0 :(得分:0)
根据StatelessSession JavaDoc
无状态会话也不实现第一级缓存 与任何二级缓存交互,也不实现 事务性后写或自动脏检查,也不做 操作级联到关联的实例。集合被忽略 无国籍的会议。通过无状态会话执行的操作 绕过Hibernate的事件模型和拦截器。无国籍会议 由于缺少a,很容易受到数据混叠效应的影响 第一级缓存
它不维护第一级缓存,因此不知道对象的当前状态(Transient,Persistent,Detached或Removed),因此无法做出有意识的决定。您可以使用HQL进行查询,以查找数据库中是否存在相同的记录,并将相应的方法调用insert()
或update()
。但这是代价高昂的。
如果要更新或插入十万条记录,最好使用基本的JDBC而不是休眠。这将解决你的记忆问题。