如何将 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;
令我震惊的是,这个问题的答案并不容易找到,但是 - 我如何配置我的 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;