【问题标题】:Spring Data JDBC: Conversion of compound domain typesSpring Data JDBC:复合域类型的转换
【发布时间】:2020-01-14 07:53:35
【问题描述】:

在听了 Jens Schauder 的关于 Spring Data JDBC 和 Doamin-Driven Design 的精彩演讲后(作为 AFOL,我喜欢你的例子;-)我做了一些实验,但很快就被我的域类型卡住了。当然,我需要编写自定义 JDBC 转换器,例如将 TelephoneNumber 映射到 String 并返回,但是我如何处理更复杂的类型,例如以 LocalDate 作为开始日期、以 LocalDate 作为结束日期的句点。或者带有街道、门牌号、邮政编码、城市的地址......

我无法为这些类型添加注释,因为它们可能具有不同的含义,具体取决于它们的用途,例如发票地址与送货地址。

使用JPA/Hibernate 可以使用@Columns@AttributeOverrides 或者实现复合hibernate 用户类型,但是在Spring Data JDBC 中发现只有简单的转换器。

我是否遗漏了什么,或者 Spring Data JDBC 还不能做到这一点?

【问题讨论】:

    标签: java spring spring-data spring-data-jdbc


    【解决方案1】:

    我认为您正在寻找的是 @Embedded 注释。 它在 1.1.x 版本中可用。 使用它(以及 Lombok 以保持代码简短),您可以像这样建模 Period

    @Value
    class Period {
        LocalDate from;
        LocalDate until;
    }
    

    并像这样使用它:

    @Value
    class SpecialOffer {
         String name;
         int rebate;
    
         @Embedded(onEmpty = OnEmpty.USE_EMPTY, prefix="valid_")
         Period valid;
    }
    

    这会将对象映射到单个表 SPECIAL_OFFER 与列 NAMEREBATEVALID_FROMVALID_UNTIL

    目前无法为单个属性指定Converter。 解决这个问题的方法是围绕值创建一个包装器并为此创建一个转换器。

    【讨论】:

      猜你喜欢
      • 2019-04-06
      • 2018-11-02
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多