在Spring Hibernate项目中,我如何在单个事务中的同一行的同一表上使用getByKey(PK键)和saveO



在下面的代码中,当我通过传递表中已经存在的节点来调用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 更新

最新更新