我如何配置Spring Boot JPA Java实体以自动修剪每个CHAR列中的字符串?

问题描述 投票:0回答:1

我很惊讶地发现这个问题的答案并不容易,但是-如何将Spring-Boot应用程序的JPA实体配置为ALL,以自动修剪每个String属性?

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

重写Entity POJO类的getter / setter方法会令人恶心,因为有数百种方法,而且因为我只是通过使用Lombok摆脱了它们。 Pleeeeaaase告诉我,有一种方法可以配置Spring / Hibernate以自动修剪每个CHAR(N)String列的尾随空格...

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;
}
java hibernate spring-boot spring-data-jpa trim
1个回答
0
投票

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

@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;
© www.soinside.com 2019 - 2024. All rights reserved.