如何将自定义方法添加到Spring Data JPA

2022-08-31 06:09:55

我正在研究Spring Data JPA。考虑以下示例,我将默认使用所有crud和finder功能,如果我想自定义查找器,那么也可以在界面本身中轻松完成。

@Transactional(readOnly = true)
public interface AccountRepository extends JpaRepository<Account, Long> {

  @Query("<JPQ statement here>")
  List<Account> findByCustomer(Customer customer);
}

我想知道如何为上述帐户存储库添加完整的自定义方法及其实现?由于它是一个接口,我无法在那里实现该方法。


答案 1

您需要为自定义方法创建一个单独的接口:

public interface AccountRepository 
    extends JpaRepository<Account, Long>, AccountRepositoryCustom { ... }

public interface AccountRepositoryCustom {
    public void customMethod();
}

并为该接口提供一个实现类:

public class AccountRepositoryImpl implements AccountRepositoryCustom {

    @Autowired
    @Lazy
    AccountRepository accountRepository;  /* Optional - if you need it */

    public void customMethod() { ... }
}

另请参阅:


答案 2

除了 axtavt 的答案之外,不要忘记,如果您需要实体管理器来构建查询,则可以在自定义实现中注入实体管理器:

public class AccountRepositoryImpl implements AccountRepositoryCustom {

    @PersistenceContext
    private EntityManager em;

    public void customMethod() { 
        ...
        em.createQuery(yourCriteria);
        ...
    }
}

推荐