2

在听了 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 吗?

4

1 回答 1

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具有列NAME, REBATE, VALID_FROM,的单个表VALID_UNTIL

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

于 2019-09-13T05:19:38.713 回答