如何从数据库和应用程序

时间:2018-01-28 10:08:22

标签: java hibernate jpa oracle11g optimistic-locking

具有某个子级及其子级的父实体对象可能会更改父对象状态,为防止出现并发问题,有一个很好的解决方案,名称为:乐观锁定

来自Vlad Mihalcea博客的

this好文章解决了所有主要问题,您不必担心来自父和子操作的管理版本字段以增加版本。

但问题在于:我可以想象作为父对象的对象依赖于大约4个子对象,并且这些子对象中的一些对象在数据库端执行它们的操作。 在数据库端对版本字段进行更新操作是否合乎逻辑?或者它不是我怎么能解决这个问题?解决方案是什么?

我的一些代码示例在这里:

@Transactional
    public Long save(Long entityId) {
                 Parent parent= iParentService.loadByEntityId(entityId);
                 parent.setStatus(0)// known as first regstration
                 iParentService.persist(parent);
    }
在应用程序端的子程序保存操作中的

可能会更改并更新父项:

   @Transactional
            public Long save(Long childId) {
                         Child child= iChildService.loadByEntityId(childId);
                         Parent parent = child.getParent(); 
                         parent.setStatus(1)// save complete 
                         iParentService.persist(parent);
                         iChildService.persist(child);
            }

并且数据库端的确认操作在Oracle过程中,并从应用程序数据访问层调用它,如下所示:

 Query query = session.createSQLQuery("{call    DBPK_PARENT.CONFIRM(:parentId,:userId,:userIp)} ");
    query.setParameter("parentId", parentId);
    query.setParameter("userId", userId);
    query.setParameter("userIp", userIp);
    query.executeUpdate();

并在它的最后运行一个更新父实体状态的sql命令:

update Parent p 
set p.status=2 -- known as confirm status 
where p.id=parentId;

0 个答案:

没有答案
相关问题