spring-data-jpa 如何动态创建和注册AttributeConverter

9rnv2umw  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(169)

我写了一个Sping Boot 启动器。有一些逻辑需要AttributeConverter来为我的服务服务。是否可以在启动器中创建它并在休眠中注册它?

aiazj4mn

aiazj4mn1#

您可以使用@Converter(autoApply = true)为给定类型的所有实体属性全局启用AttributeConverter:

@Converter(autoApply = true) // important
public class FooConverter implements AttributeConverter<Foo, String> {

    @Override
    public String convertToDatabaseColumn(Foo attribute) {
        // ...
    }

    @Override
    public Color convertToEntityAttribute(String dbData) {
        // ..
    }
}

然而,这是假设只有一个转换器用于该类型.如果您有多个不同的转换器,比如说不同的spring-boot-starter依赖项,您可以使用Hibernate @ConverterRegistration为服务激活一个特定的转换器:

@org.hibernate.annotations.ConverterRegistration(converter=com.company.entitiy.FooConverter.class, autoApply=true)
package com.company.entitiy;

如果您想要更精细的配置,可以分别在每个实体属性上配置转换器,例如:

@Entity
public class Bar {

    @Convert(converter = FooConverter.class)
    private Foo foo;

    // ...
}

相关问题