【发布时间】:2022-11-20 02:29:03
【问题描述】:
在我的存储库类中,我正在使用 @Query 注释执行本机查询,只需从 MyDomain 中选择几个字段,如下所示:
@Repository
public interface MyRepository extends JpaRepository<MyDomain, Long> {
@Query("SELECT q.firstname, q.lastname from MyDomain q WHERE q.firstname = :firstname")
Page<MyDomain> findByFirstName(String firstname, Pageable pageable);
}
这是从 MyDomain 转换为 Dto 的映射器,反之亦然
@Mapper(componentModel = "spring")
public interface Mapper {
MyDomainDto toDto(MyDomain data);
MyDomain fromDto(MyDomainDto data);
}
然后我在服务中调用这个方法:
private ResponseEntity<List<MyDomainDto>> getByFirstName(String firstname, Pageable pageable) {
Page<MyDomain> page = dataRepository.findByfirstName(firstname, pageable);
List<MyDomain> result = page.getContent();
return new ResponseEntity<>(
result.stream().map(mapper::toDto).collect(Collectors.toList()), HttpStatus.OK);
当我获取结果 Page<MyDomain> page = dataRepository.findByfirstName(firstname, pageable); 时,它返回一个对象列表而不是我的自定义类 MyDomain。
但是,如果我像这样使用本机查询,通过从 MyDomain 获取所有数据
@Repository
public interface MyRepository extends JpaRepository<MyDomain, Long> {
@Query("SELECT q from MyDomain q WHERE q.firstname = :firstname")
Page<MyDomain> findByFirstName(String firstname, Pageable pageable);
}
然后我会得到 Page<MyDomain> page = dataRepository.findByfirstName(firstname, pageable);返回的自定义类MyDomain
当我只取几个字段而不是所有字段时,如何获得相同的结果? 我尝试将其投射到 My Domain 但没有成功。 提前致谢(如果有人在星期六阅读这篇文章)
【问题讨论】:
标签: spring-boot jpa nativequery