我需要知道是否有办法在当前的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
答案 0 :(得分:0)
不,这是不可能的。
如果对象不知道它以前的(持久化)状态,那么Hibernate将无法检查对象中的更改(因此在刷新合并所做的更改时,它将无法生成正确的SQL)。