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

Posted

技术标签:

【中文标题】Spring Data JDBC 自定义查询参数转换器【英文标题】:Spring Data JDBC custom query parameter converter 【发布时间】:2020-03-30 11:08:41 【问题描述】:

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

我已经创建并注册了从引用到 UUID 的自定义转换器,反之亦然,并且希望在通过引用查找实体时使用它们。在从数据库中获取和存储实体时可以进行转换 (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 Data JDBC 一起使用?

【问题讨论】:

【参考方案1】:

这是一个known issue,它是用2.0 M3 实现的,即available from Springs Milestone repository。请试一试。

注意:2.0 M3 引入了Dialect,但只有 2.0 RC1` 才提供正确的自动检测,该 RC1 将于今天 2020-03-31 发布。您可能会等待它来省去一些麻烦

【讨论】:

感谢您的回答,我喜欢您使用 Data JDBC 所做的工作 ☺️谢谢,我们尽力了

以上是关于Spring Data JDBC 自定义查询参数转换器的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data Elasticsearch自定义@Query,参数超过10个

Spring Data JPA 之 原生SQL使用

使用 Spring DATA JPA 创建自定义查询?

Spring Data JDBC - 如何使用自定义 ID 生成

在 JPA 存储库(Spring Data Jpa)中执行自定义查询

springjdbc执行自定义sql