【问题标题】:Build query using Spring Elasticsearch data repository使用 Spring Elasticsearch 数据存储库构建查询
【发布时间】:2019-06-25 08:32:18
【问题描述】:

我正在使用 elasticsearch 6 和 Spring data jpa 进行查询。我写了这段代码:

  1. 持久对象:
@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;

}
  1. 存储库:
@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。

我没有找到解决办法。

【问题讨论】:

  • lombok 可能是这里的罪魁祸首..不确定...您可以尝试在您的班级中将名称命名为 vehicleId 而不是 id_vehicle

标签: java spring elasticsearch jpa repository


【解决方案1】:

下划线是个问题,解决方法是遵循java命名约定。 Spring documentation 说:

要解决这种歧义,您可以在方法名称中使用 _ 来 手动定义遍历点。所以我们的方法名称将是 如下:

List&lt;Person&gt; findByAddress_ZipCode(ZipCode zipCode);

因为我们将下划线字符视为保留字符,我们强烈建议 遵循标准 Java 命名约定(即,不使用 属性名称中的下划线,但使用驼峰式大小写)。

如果您不能更改名称,选项之一是使用@Query 注释。

【讨论】:

    猜你喜欢
    • 2022-12-11
    • 2021-11-11
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多