Spring boot Spring数据JPA-通过映射对象查找

Spring boot Spring数据JPA-通过映射对象查找,spring-boot,spring-data-jpa,Spring Boot,Spring Data Jpa,在我的遗留应用程序中,我有一个国家表、州表以及一个国家和州的映射表,其中没有多少额外的列 我创建了这样一个实体类 class CountryStateMapping { @Id private long id; private Long countryId; @OneToOne @JoinColumn(name="state_id") private State state; //getters seters } 我的存储库 public interfac

在我的遗留应用程序中,我有一个国家表、州表以及一个国家和州的映射表,其中没有多少额外的列

我创建了这样一个实体类

class CountryStateMapping {

  @Id
  private long id;

  private Long countryId;

  @OneToOne
  @JoinColumn(name="state_id")
  private State state;

  //getters seters

}
我的存储库

public interface CountryStateMapping extends JpaRepository<CountryStateMapping, Long>{
   Optional<CountryStateMapping> findByStateId(long stateId);
   Optional<CountryStateMapping> findByState(State state);
}

正确的方法是什么?

尝试用下划线表示id,如下所示

public interface CountryStateMapping<CountryStateMapping, Long>{
   Optional<CountryStateMapping> findByState_Id(long stateId);
   Optional<CountryStateMapping> findByState(State state);
}
公共接口CountryStateMapping{
可选findByState_Id(长stateId);
可选findByState(状态);
}

我觉得这不是正确的方法。正确的方法是

    public interface CountryStateMappingRepository extends JpaRepository<CountryStateMapping, Long>  {
               Optional<CountryStateMapping> findByStateId(long stateId);
               @Query("select s.something from State s" )
               Optional<CountryStateMapping> findByState(State state);
            }
公共接口CountryStateMappingRepository扩展了JpaRepository{
可选findByStateId(长stateId);
@查询(“从状态s中选择s.something”)
可选findByState(状态);
}
这意味着两件事

  • 通过扩展JpaRepository,我们得到了一系列用于创建、更新、删除和查找的通用CRUD方法
  • 2.它允许Spring扫描该接口的类路径,并为其创建Springbean

    此外,您还需要一些配置。为此,您需要创建一个用于数据源的配置类。您可以找到许多这样做的示例,例如

    您还可以使用@Query注释使用自定义查询和简单查询


    谢谢

    谢谢。我已经扩展了JPA假设。我的错误。我现在更正了。然后您需要添加配置类。
        public interface CountryStateMappingRepository extends JpaRepository<CountryStateMapping, Long>  {
                   Optional<CountryStateMapping> findByStateId(long stateId);
                   @Query("select s.something from State s" )
                   Optional<CountryStateMapping> findByState(State state);
                }