在Spring-Hibernate项目中如何在单个事务中的同一行中的同一个表上使用getByKey(PK键)和saveOrUpdate(Obejct对象)

时间:2015-12-30 07:59:50

标签: spring hibernate

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

1 个答案:

答案 0 :(得分:0)

您无需使用方法isNodeIdEqual进行检查。 Hibernate的saveOrUpdate会为你做到这一点。如果找不到具有特定key的记录,则会保存,如果发现它将由key更新