Spring数据JDBC自定义查询参数转换器

Spring Data JDBC custom query parameter converter

我正在尝试将自定义查询添加到 Spring 数据 JDBC CrudRepository 以允许通过备用自然键查找实体。该实体有一个 ID,在本例中为 Long,还有一个自然键,类型为 Reference(基础类型为 UUID)。

我已经创建并注册了从 Reference 到 UUID 的自定义转换器,反之亦然,并且想在通过 Reference 查找实体时使用它们。转换在从数据库 (Postgres 12.2) 获取和存储实体时有效。

我无法做到的是定义一个自定义方法,通过其引用找到实体。

这跟我的情况差不多:

public interface OrderRepository implements CrudRepository<Order, Long> {

    @Query("select o from Order o where o.reference = :reference")
    Optional<Order> findByReference(@Param("reference") Order.Reference reference);
}

这样可以吗?我正在使用最新版本的 Spring Data JDBC (1.1.6)。 我想避免使用接受基础类型(在本例中为 UUID)的查询。

如果使用自定义查询无法做到这一点,有哪些可用选项? 我考虑过可能将 MyBatis 与 Spring 数据一起使用 JDBC?

这是一个known issue, which got implemented with 2.0 M3 which is available from Springs Milestone repository。请试一试。

注意:2.0 M3 引入了 Dialect,但正确的自动检测仅随 2.0 RC1` 一起提供,该版本将于今天 2020-03-31 发布。您可能会等待,以免让您头疼