Spring boot Spring数据JPA示例查询返回Null
我已经查看了许多示例,并尝试了各种w/&w/o示例匹配器约束,但无论我做什么,我的示例查询都只返回null 我能够让CRUD存储库数据调用正常工作,没有任何问题,但是我将其扩展到了JPA存储库,并添加了QueryByExampleExecutor接口。findOne()似乎不起作用 使用SpringBoot2.2.6.RELEASE,SpringBootStarter数据jpa和MySQL5.7 使用示例查询时,是否需要完成整个对象以进行匹配?换句话说,所有的设定者都需要正确的信息吗?或者只是要匹配的对象数据项 是的,数据库只包含一个我试图匹配的正确字符串 客户Spring boot Spring数据JPA示例查询返回Null,spring-boot,jpa,spring-data-jpa,query-by-example,Spring Boot,Jpa,Spring Data Jpa,Query By Example,我已经查看了许多示例,并尝试了各种w/&w/o示例匹配器约束,但无论我做什么,我的示例查询都只返回null 我能够让CRUD存储库数据调用正常工作,没有任何问题,但是我将其扩展到了JPA存储库,并添加了QueryByExampleExecutor接口。findOne()似乎不起作用 使用SpringBoot2.2.6.RELEASE,SpringBootStarter数据jpa和MySQL5.7 使用示例查询时,是否需要完成整个对象以进行匹配?换句话说,所有的设定者都需要正确的信息吗?或者只是要
@实体
@表(name=“客户”)
公共类客户{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”)
私人长id;
@列(名称=“社会保障号”)
私有字符串socialSecurityNumber;
//还包括其他数据字段
}
CustomerRepository
import org.springframework.data.jpa.repository.JpaRepository;
公共接口CustomerRepository扩展了JpaRepository{
}
QueryByExampleExecutor
import java.util.Optional;
导入org.springframework.data.domain.Example;
导入org.springframework.data.domain.Page;
导入org.springframework.data.domain.Pageable;
导入org.springframework.data.domain.Sort;
公共接口QueryByExampleExecutor{
可选findOne(示例);
Iterable findAll(示例);
Iterable findAll(示例,排序);
pagefindall(例如,Pageable Pageable);
长计数(示例);
存在布尔值(示例);
}
客户服务
公共接口CustomerService{
公共客户findBySSN(字符串ssn);
}
CustomerServiceImpl
@服务
公共类CustomerServiceImpl实现CustomerService{
私人客户存储客户存储;
@自动连线
公共CustomerServiceImpl(CustomerRepository客户存储库){
customerRepository=客户存储库;
}
@凌驾
公共客户findBySSN(字符串ssn){
//创建一个新对象,用作查询的基础
客户=新客户();
//设置查询的参数
customer.setSocialSecurityNumber(ssn);
//创建一个示例查询
示例customerExample=Example.of(客户);
可选结果=customerRepository.findOne(customerExample);
如果(result.isPresent()){
返回result.get();
}否则{
//没有找到客户
抛出新的ObjectNotFoundException(“客户”,“社会保险号(“+ssn+”)未找到…”);
}
}
}
调用方法
@Autowired
私人客户服务;
Customer ssnccustomer=customerService.findBySSN(“123456789”);
如果(ssnCustomer==null){
System.out.println(“未找到的SSN为空”);
}否则{
System.out.println(“找到的SSN”+ssnCustomer.getId());
}
我错过了什么?提前感谢。将id类型从long更改为long。long自动将值设置为0,并使其成为查询的一部分 私人长id
相应地更改getter和Setter将id类型从long更改为long。long自动将值设置为0,并使其成为查询的一部分 私人长id
相应地更改getter和Setter我看不到customerRepository在您的服务类中已初始化。您还可以详细说明如何检查空值。如果返回对象,则您将获得详细信息或代码,并抛出异常。我已编辑服务实现以显示存储库初始化。对不起,我以前忘了。数据调用完成后,我的内部异常处理程序显示===2020-06-03 21:16:20 WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver.logException(199)-已解析[com…….exception.ObjectNotFoundException:未找到客户-社会保险号码(123456789)…]===我还将一些AOP用于日志记录目的,在本测试中,我将其关闭。使用AOP==c.z.z.AOP..AroundServicesDevice(195)-CustomerServiceImpl.findBySSN(..)时出现异常:找不到客户-SSN(123456789)。。c、 z.z.aop…后向警告(172)-后向警告运行()。。c、 z.z.aop…logMethodSignatureAndArguments(240)-调用的方法:CustomerServiceImpl.findBySSN(..),方法签名:Customer…service.CustomerServiceImpl.findBySSN(字符串)c.z.aop…logMethodSignatureAndArguments(248)-在下面的建议(177)之后,参数是:123456789 c.z.aop-引发异常:找不到客户-社会保险号码(123456789)。1)在实体类中将id从long更改为long。2) 要从存储库读取数据,请通过传递ssn字符串调用findOneBySocialSecurityNumber。您不需要创建对象来获取记录。@AlokSingh谢谢,我以前只创建了存储库调用并使其工作。但是想尝试/使用我也找到的示例查询方法。关键是按照您的建议将我的所有原语更改为包装类。我没有看到customerRepository在您的服务类中初始化。您还可以详细说明如何检查空值。如果返回对象,则您将获得详细信息或代码,并抛出异常。我已编辑服务实现以显示存储库初始化。对不起,我以前忘了。数据调用完成后,我的内部异常处理程序显示===2020-06-03 21:16:20 WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver.logException(199)-R