在当前的hibernate会话中合并分离的实体而不从DB重新加载它

时间:2015-09-16 10:19:06

标签: hibernate

我需要知道是否有办法在当前的hibernate会话中合并分离的实体,而无需从DB重新加载实体。

以下是该方案:

我有一个表CodeItem,如下所示

CodeItem
-------------------
Code      | varchar
CodeType  | varchar
Label     | varchar

pk是一个由列(Code, CodeType)组成的复合键,没有标识列。

数据库是SQLServer 2012,ORM是休眠4。

实现了Hibernate L2缓存,它对除CodeItem实体之外的所有实体都运行良好。

CodeItem实体在第一次访问时会被缓存,但是当访问同一个实体时,它不会从缓存中检索,而是从DB中检索,因为身份列不存在。

对于某些限制,我无法更改表定义。 为了克服性能问题,我已经实现了弹簧缓存机制,它工作正常。

问题是当我从spring缓存区域检索CodeItem实体时,我需要在hibernate会话中将其合并,因为它是一个分离的实体。 为此我使用session.merge,它将从DB重新加载实体。

有没有什么方法可以将分离的CodeItem实体合并到休眠会话而不进行数据库查询?

我希望有一个像

这样的界面
session.merge(entity, reloadFromDBFlag)     //where reloadFromDBFlag is boolean

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。

如果对象不知道它以前的(持久化)状态,那么Hibernate将无法检查对象中的更改(因此在刷新合并所做的更改时,它将无法生成正确的SQL)。