如何将 Spring Boot JPA Java 实体配置为自动从每个 CHAR 列中 trim 字符串?

How can I configure Spring Boot JPA Java Entities to automatically trim Strings from every CHAR column?

令我震惊的是,这个问题的答案并不容易找到,但是 - 我如何配置我的 Spring-Boot 应用程序的 JPA 实体自动全部 trim 每个字符串 属性?

我正在使用旧版 DB2 数据库,其中每个 CHAR 列的每个值都由我无法控制的各种应用程序用尾随空格填充。大约有 50 个包含许多 CHAR(N) 列的互连表,我必须对数据进行无数次转换和比较,而这些转换/比较永远不会使用尾随空格。所以我发现自己在我的代码中调用了 trim() 大约十亿次。

重写实体 POJO 类' getter/setter 方法感觉很恶心,因为有数百种方法,而且我只是通过使用 Lombok 摆脱了它们。请告诉我有一种方法可以将 Spring/Hibernate 配置为自动 trim 每个 CHAR(N) 字符串列的尾随空格...

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Data
@NoArgsConstructor
@Entity
@Table(name="MEASUREMENT_TYPE")
public class MeasurementType {
    @Id
    @Column(name="MSR_TYP_CD")
    private short measurementTypeCode;

    @Column(name="DES_TXT", columnDefinition = "CHAR", length = 5)
    private String description;
}

一种解决方案是创建自定义转换器,如下所示:

@Converter
public class CharConverter implements AttributeConverter<String, String> {

    @Override
    public String convertToDatabaseColumn(String value) {
        return value;
    }

    @Override
    public String convertToEntityAttribute(String value) {
        if (value == null) {
            return null;
        }

        return value.trim();
    }

}

并在每个 CHAR 列中应用它:

@Column(name="DES_TXT", columnDefinition = "CHAR", length = 5)
@Convert(converter = CharConverter.class)
private String description;