在下面的代码中,当我通过传递表中已经存在的节点来调用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);
}
您不需要使用方法isNodeIdEqual
进行检查。Hibernate的saveOrUpdate
将为您做到这一点。如果没有找到具有特定key
的记录,它将保存,如果找到,它将通过key
更新