public interface VehicleRepository extends JpaRepository<Vehicle, String> {
@Query("select v.sourceModule as sourceModule, count(v) as vehicleCount from Vehicle v group by v.sourceModule")
List<Object[]> sourceModuleStats();
}
@Override
public List<SourceModuleStatDTO> getSourceModuleStats() {
List<Object[]> objects = vehicleRepository.sourceModuleStats();
return objects.stream()
.map(o->SourceModuleStatDTO.from((String)o[0], (Long)o[1]))
.collect(Collectors.toList());
}
@Value.Immutable
@JsonSerialize(as = ImmutableSourceModuleStatDTO.class)
@JsonDeserialize(as = ImmutableSourceModuleStatDTO.class)
public abstract class SourceModuleStatDTO {
public abstract String sourceModule();
public abstract long vehicleCount();
public static SourceModuleStatDTO from(String sm, long c) {
return ImmutableSourceModuleStatDTO.builder()
.sourceModule(sm)
.vehicleCount(c)
.build();
}
}
这里的问题是映射,我需要强制转换结果或手动检查一切。即使jdbctemplate
有更好的映射能力,我也不敢相信没有更好的方法来做到这一点。
我也试过这样做:https://stackoverflow.com/a/36329166/840315,但您需要将类路径硬编码到查询中以使其工作,而且我仍然需要将对象映射到不可变的对象。
使用JdbcTemplate,您可以使用行映射器
(src):
private static final class EmployeeMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setCountry(rs.getString("country"));
employee.setEmployeeName(rs.getString("employee"));
return employee;
}
}
spring data JPA@query
是否有类似的内容?
用下面的预测怎么样?
static interface VehicleStats {
public String getSourceModule();
public Long getVehicleCount();
}
您的存储库方法将是
@Query("select v.sourceModule as sourceModule, count(v) as vehicleCount from Vehicle v group by v.sourceModule")
List<VehicleStats> sourceModuleStats();
在您的服务类中,您可以使用如下所示的接口方法。
List<VehicleStats> objects = vehicleRepository.sourceModuleStats();
return objects.stream()
.map(o->SourceModuleStatDTO.from(getSourceModule(),getVehicleCount() )
.collect(Collectors.toList());
我有一个带有两个字段的简单Person实体: 一个JpaRepository,我在其中重写findAll方法以根据用户角色限制记录: 上述设置工作正常。但当我将查询更新为以下内容时,它会抛出如下异常。似乎无法解析SpEL表达式。 有问题的查询: 例外: 我尝试了以下选项,但得到了相同的例外: 1)用=替换赞 2) 设置硬编码 ID: 有什么建议吗? 仅供参考: 我有Spring的靴子1.3.6.R
我有不同实现的< code>ProductHandler类,例如< code>ABCProductHandler、< code>DEFProductHandler等..它们是使用如下所示的命令模式从< code>ProductServiceImpl类调用的。 产品ServiceImpl类: 但是,我对上面的 类不满意,因为有很多带有样板代码的产品 调用。 现在,我的问题是,有什么方法可以轻松加载?
问题内容: 我目前有以下环绕存储过程的命名查询:- 列和是存储过程返回的确切列名。我创建了一个包含相同列名的bean,以便可以将查询的结果映射到该bean中。 调用命名查询并将结果映射到Bean的Hibernate代码: 所有这些都可以正常工作,但是我不想依赖存储过程中的列名,而是想在中使用自己的列名,例如: 如何在上面的命名查询中将列名与存储过程的列相对应? 谢谢。 更新 -我在下面添加了最终解
我正在尝试用dataframe.from_dict操作命名新dataframe的列。
我试图在CrudRepository中创建一个方法,它将能够给出用户列表,这些用户的用户名就像输入参数一样(不仅以它开头,而且包含它)。我尝试使用方法,但正如Spring文档中所述,该方法等于“”。这对我不利,因为我已经告诉我,我正在尝试获取所有用户的用户名包含...
问题内容: 无论如何,我可以在现有的Elasticsearch映射中重命名元素而不必添加新元素?如果是这样,为了避免破坏现有映射,最好的方法是什么? 例如从fieldCamelcase到fieldCamelCase 问题答案: 您可以通过创建一个Ingest管道来做到这一点,该管道包含一个Rename Processor 和Reindex API 。 请注意,您需要运行Elasticsearch