【问题标题】:Spring data JPA findBy returns nullSpring数据JPA findBy返回null
【发布时间】:2023-12-08 02:22:01
【问题描述】:

我正在使用 Spring Data JPA 并遇到一个奇怪的问题。 方法 findBY.. 和 findOne() 返回空值,而 findAll() 返回数据库中存在的所有记录。

实体类:

@Entity
public class Person {
private String name;
@Id 
private String nino;
private Integer employerId;
private Integer employmentLevel;

存储库类

public interface PersonRepository extends  JpaRepository<Person, String>{

    Person findByNino(String nino);
}

服务类

@Transactional(readOnly = true)
    private Person fetchPerson(String nino)
    {
        return personRepository.findByNino(nino);
    }

谁能帮帮我?

【问题讨论】:

  • 您正在寻找正确的 Nino?您是否尝试过调试以查看字符串是否符合您的预期?
  • 是的,方法调用中的字符串值是正确的。我已经调试过了。

标签: sql spring hibernate spring-data-jpa jpql


【解决方案1】:

您的方法应该有效,请检查您的 nino 值。只是为了确保和测试目的,使用替代方法 -

@Query("select p from Person p where p.nino = :nino")
Person findByNino(@Param("nino") String nino);

【讨论】:

  • 我已使用此查询进行测试。结果仍然为空。这是控制台输出:选择 person0_.nino 作为 nino1_0_,person0_.employer_id 作为employee2_0_,person0_.employment_level 作为employme3_0_,person0_.name 作为name4_0_ from person person0_ where person0_.nino=?
  • 你能分享请求的数据和数据库表中的数据吗?
【解决方案2】:

我发现的问题是:

我正在使用邮递员的服务http://localhost:8080/getPerson?nino=“AB”&id=1。

双引号是问题所在。应该是http://localhost:8080/getPerson?nino=AB&id=1

【讨论】: