【问题标题】:Best practice to implement JpaRepository实现 JpaRepository 的最佳实践
【发布时间】:2026-02-11 10:25:01
【问题描述】:

实施 JpaRepository 的最佳实践是什么?

public interface XRepository implements JpaRepository<X, Long> {
   @Query(".....")
   X findByY(@Param("yId") Long yId);
}

在实现 XRepository 的非抽象类中是否存在跳过此方法的实现的方法?

据我所知,Java 说不。

【问题讨论】:

  • 首先如果你使用findBy...你不需要查询,它应该自动完成。你不需要实现任何东西,你只需要声明带有参数和返回值的方法。就是这样
  • XXXRepository 与 JPA API 无关。那就是 Spring Data JPA,一个完全不同的 API

标签: java database spring interface spring-data-jpa


【解决方案1】:

您不需要实现此接口。包括以下注解并扩展基本接口:

@Transactional(readOnly = true)
@Repository

例如:

@Transactional(readOnly = true)
@Repository
public interface CitizenRepository extends JpaRepository<Citizen, Integer> {

    @Query("SELECT c FROM Citizen c WHERE c.idGame=?1")
    Citizen findByGameId(int gameId);
}

【讨论】:

  • 我的意思是,如果我使用的不是Java 9+并且需要私有方法,那么我需要实现它。
  • 我知道,如果我需要私有方法,我正在谈论特定的情况。