spring@transactional如何处理对象锁

czfnxgou  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(148)

假设数据的结构非常简单:有人和狗,人可以有多条狗。在内部,它们之间存在多对多关系。
考虑到这个简单的方法:

@Transactional
public void CreateDog(int personId, string name) {
    Person person = GetPerson(personId);
    Dog dog = new Dog(name, person);
    ...
    dog.setAdoptedDate(now);
    ...
}

有可能是多个 CreateDog 同时运行 Person ? 因为每只狗都是独立的,所以狗与狗之间没有限制是有意义的 CreateDog 在同一个所有者中。
我如何确切地知道@transactional应用了哪种类型的锁定?有没有可能它锁定的次数超出了它的需要,这最终会使应用程序运行得比手动处理锁定时更糟糕?这显然是一个非常简单的例子,但我们可以想到更复杂的场景,这将是一个问题。
我的意思是 Dogs 是独立的,但是 Persons 可能不是。尽管它们不是独立的,但是在这个用例中它们不会发生冲突,所以不应该有任何问题。
所以问题是,Spring锁定 Person 在整个过程中?在这种情况下,同一个人没有并发性。有可能避免吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题