我正在使用Elasticsearch 6和Spring数据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:找不到类型为String的属性工具!遍历的路径:VehicleEventEL.id。
我找不到解决方法。
答案 0 :(得分:1)
下划线是一个问题,解决方案是遵循Java命名约定。 Spring documentation说:
要解决这种歧义,您可以在方法名称中使用_来 手动定义遍历点。因此我们的方法名称为 如下:
List<Person> findByAddress_ZipCode(ZipCode zipCode);
由于我们将下划线字符视为保留字符,因此我们强烈建议 遵循标准的Java命名约定(即,不使用 在属性名称下划线,但改用驼峰式大小写)。
如果您不能更改名称,则选项之一就是使用@Query注释。