Параллельное добавление потомков в отношениях ManyToMany Parent-Child с блокировкой optimisti c - PullRequest
2 голосов
/ 15 января 2020

При использовании Optimisti c Блокировка с помощью Hibernate; возможно ли разрешить добавление дочерних элементов в родительские отношения ManyToMany с дочерними элементами без увеличения номера версии родительского элемента без использования @OptimisticLock(excluded = true) на стороне родителей?

В этом случае существует два объекта; Родитель и ребенок. Между ними существует связь ManyToMany с использованием JoinTable.

class Parent {

    // ... some code...

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "children")
    @OptimisticLock(excluded = true) // Is it possible to get rid of this?
    public List<Child> getChildren() {
            return this.children;
        }
    public void setChildren(List<Child> children) {
            this.children = children;
        }
}

class Child {

    // ... some code...

    @ManyToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "PARENT_CHILD", joinColumns = {@JoinColumn(name = "child_id")}, inverseJoinColumns = {@JoinColumn(name = "parent_id")})
    public List<Parent> getParents() { 
        return this.parents; 
    }
    public void setParents(List<Parent> parents) { 
        this.parents = parents; 
    }
} 

Без аннотации @OptimisticLock(excluded = true) номер версии родителя, по-видимому, все еще увеличивается, когда добавляется дочерний элемент, даже если сторона-владелец отношения находятся на стороне детей - это увеличение номера версии приводит к OptimisticLockException в конце.

Цель состоит в том, чтобы иметь возможность добавить несколько детей одновременно, не получая OptimisticLockException. Этого можно достичь, добавив аннотацию @OptimisticLock(excluded = true) к родительской стороне отношения. Можно ли сделать эту работу без этой дополнительной аннотации?

...