我正在尝试查找有关如何使用 Spring Data 仅选择实体的某些字段的信息(我正在使用 JPA)。我只想选择实体的特定信息,存储库接口为您提供了返回整个实体信息的方法!。有时我只需要一个实体的 2 或 3 个字段并返回 20,30,...100.. 字段可能有点矫枉过正。
我会使用 Hibernate Criteria Projections 甚至 JPA“SELECT NEW ....”查询来实现这种功能。不知道 Spring Data 是否可行。
谢谢。
我正在尝试查找有关如何使用 Spring Data 仅选择实体的某些字段的信息(我正在使用 JPA)。我只想选择实体的特定信息,存储库接口为您提供了返回整个实体信息的方法!。有时我只需要一个实体的 2 或 3 个字段并返回 20,30,...100.. 字段可能有点矫枉过正。
我会使用 Hibernate Criteria Projections 甚至 JPA“SELECT NEW ....”查询来实现这种功能。不知道 Spring Data 是否可行。
谢谢。
您可以做的是List<Object[]>
从存储库返回一个。然后在您的服务类中迭代此列表并手动创建您需要的对象。示例存储库方法
@Query("select el.moduleId, el.threadId from ExceptionLog el")
public List<Object[]> tempQuery();
我想你也可以这样做
SomeDataPOJO{
required col1
required col2
}
然后像这样写查询
@Query("select new SomeDataPOJO from requiredTable where xyz="abc")
public List<SomeDataPoJO> tempQuery()
它不是普通的 Spring Data,但你考虑过使用 SpringsJdbcTemplate
吗?如果您使用 Spring Boots Autoconfiguration 并且有几个用于转换查询结果的处理程序,它也在上下文中。
例如SELECT a, b FROM EMPLOYEE WHERE ID = ?
您可以使用的查询
String query = "SELECT a, b FROM EMPLOYEE WHERE ID = ?";
List<Pair<String,Integer>> employees = jdbcTemplate.queryForObject(
query, new Object[] { id }, new ExampleRowMapper());
将结果中的ExampleRowMapper
每一行转换为给定的返回类型(Pair<String, Integer>
在这种情况下),可能看起来像
public class ExampleRowMapper implements RowMapper<Pair<String, Integer>> {
@Override
public Pair<String, Integer> mapRow(ResultSet rs, int rowNum) throws SQLException {
return Pair.of(rs.getString(1), rs.getString(2));
}
}
示例改编自https://www.baeldung.com/spring-jdbc-jdbctemplate,您可以在其中找到更多信息。
当然,它不像 JPQL 那样类型安全,因为查询是“原始”或“本机”SQL,但至少响应再次是类型安全的,我更喜欢它而不是返回Object[]
或其他东西。