我很惊讶地发现这个问题的答案并不容易,但是-如何将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;
}
一种解决方案是创建一个自定义转换器,如下所示:
@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;