在下面的代码中,当我通过传递已经在表中的节点来调用discoverAsync方法时,它应该检查表中是否存在节点id并更新该行中的其他字段。但事实上它并没有发生,hiberbate只是选择而不是更新。
我的观点是,我们无法在同一事务中同时检索和更新同一行。如果错误请纠正我。
以下是代码:
public Node discoverAsync(Node node) throws Exception {
if(isNodeIdEqual(node))
super.saveOrUpdate(node);
else
// TODO Raise Exception in case no node is available for discovery.
return node;
}
public boolean isNodeIdEqual(Node node){
String id = node.getId();
String retrievedId = getByKey(id).getId();
return id.equals(retrievedId);
}
答案 0 :(得分:0)
您无需使用方法isNodeIdEqual
进行检查。 Hibernate的saveOrUpdate
会为你做到这一点。如果找不到具有特定key
的记录,则会保存,如果发现它将由key
更新