Hibernate 更新id时是否需要刷新休眠会话

Hibernate 更新id时是否需要刷新休眠会话,hibernate,session,persistence,Hibernate,Session,Persistence,我在冬眠中遇到了一个奇怪的怪癖。也就是说,当更新复合id中的一个属性时,我发现需要在删除之后刷新会话,以便删除旧记录 session.delete(obj); session.flush(); obj.setIdProperty1(newValue); session.save(obj); 如果省略了会话.flush(),则不会删除原始记录。这意味着在更新id字段时,需要对数据库进行两次单独的调用,而不是一次调用。我想知道是否可以避免刷新,以便将删除/插入作为一个批发送 tnx 我并不奇怪你做

我在冬眠中遇到了一个奇怪的怪癖。也就是说,当更新复合id中的一个属性时,我发现需要在删除之后刷新会话,以便删除旧记录

session.delete(obj);
session.flush();
obj.setIdProperty1(newValue);
session.save(obj);
如果省略了
会话.flush()
,则不会删除原始记录。这意味着在更新id字段时,需要对数据库进行两次单独的调用,而不是一次调用。我想知道是否可以避免刷新,以便将删除/插入作为一个批发送


tnx

我并不奇怪你做这些事情有困难。主键应该是不可变的。如果没有,则必须更新外键,第一级和第二级缓存将无法再工作。难道不能像Hibernate建议的那样使用代理不可变的非复合主键吗?我认为Hibernate可能会在这种情况下自动更新其缓存。代理主键将是理想的,尽管我正在处理一些遗留代码,而在那个时候,复合键可能是唯一标识对象的好方法:)