Spring数据和锁定

Mar*_*ila 6 java spring querydsl spring-data-jpa

是否有可能在spring-data存储库中有两个方法 - 一个没有锁定T findOne(Predicate p);在一起但有锁定@Lock(LockModeType.PESSIMISTIC_WRITE) T findOne(Predicate p);

我希望有类似的东西

public interface TransactionRepository extends JpaRepository<Transaction, String>,
    QueryDslPredicateExecutor<Transaction> {

    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @AliasFor("findOne")
    Transaction findOne_withLock(Predicate p);
}
Run Code Online (Sandbox Code Playgroud)

小智 0

不,这是不可能的

Java 不允许定义两个具有相同原型的函数。您可以使用一个选择器来根据某些环境变量调用函数

    public interface TransactionRepository extends JpaRepository<Transaction, String>,
            QueryDslPredicateExecutor<Transaction> {

        @Lock(LockModeType.PESSIMISTIC_WRITE)
        Transaction findOne_withLock(Predicate p);

        default Transaction findOne(Predicate p) {
            if (EvironmentCheck) {
                return findOne_withLock(p);
            }
            return findOne(p);
        }
    }
Run Code Online (Sandbox Code Playgroud)