java - 使用 Spring Elasticsearch 数据存储库构建查询
问题描述
我正在使用 elasticsearch 6 和 Spring data jpa 进行查询。我写了这段代码:
- 持久对象:
@Document(indexName="vehicle_event", type="vehicle_event")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class VehicleEventEL {
@Id
private String id;
private Long id_vehicle;
private Long id_road;
private Float latitude;
private Float longitude;
private String name_road;
private Date timestamp;
}
- 存储库:
@Component
public interface VehicleEventELRepository extends ElasticsearchRepository<VehicleEventEL, String> {
Page<VehicleEventEL> findByTimestampBetween(String startTime, String endTime, Pageable page);
Page<VehicleEventEL> findByTimestampBetweenAndId_vehicleEquals(String startTime, String endTime, Long id_vehicle, Pageable page);
}
该方法findByTimestampBetween
有效。
该方法findByTimestampBetweenAndId_vehicleEquals
不起作用,并给我以下错误:
创建名为“vehicleEventELRepository”的 bean 时出错:调用 init 方法失败;嵌套异常是 org.springframework.data.mapping.PropertyReferenceException: No property vehicle found for type String!遍历路径:VehicleEventEL.id。
我找不到解决方案。
解决方案
下划线是一个问题,解决方案是遵循 java 命名约定。 Spring文档说:
要解决这种歧义,您可以在方法名称中使用 _ 来手动定义遍历点。所以我们的方法名称如下:
List<Person> findByAddress_ZipCode(ZipCode zipCode);
因为我们将下划线字符视为保留字符,我们强烈建议遵循标准的 Java 命名约定(即,不在属性名称中使用下划线,而是使用驼峰式大小写)。
如果您无法更改名称,则选项之一是使用 @Query 注释。
推荐阅读
- c - 不太了解MPI
- javascript - 使用 Yup 进行复选框模式验证
- typescript - 导入类型文件但也扩展它 - cordova
- java - RequestBodyAdviceAdapter 不适用于消耗 mutlipart/form-dat 的发布请求
- c# - 是否有已知的设计模式或反模式用于按执行路径对 scnarios 进行隐式分类
- c++ - 这是使用 unique_ptr 避免泄漏的最佳方法吗?
- pyspark - 将浮点列添加到 TimestampType 列(秒+毫秒)
- python - Python pandas csv文件unicode错误和东西
- sql - 用于显示缺失结果的 Oracle 查询
- r - 函数 as.Date 仅在某些行中返回 NA