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

标签 java hibernate spring-boot spring-data-jpa trim

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

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

覆盖实体 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;

关于java - 如何配置 Spring Boot JPA Java 实体以自动修剪每个 CHAR 列中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61687994/

相关文章:

java - 如何限制构建 xml 文件的测试时间执行

java - 自定义 LineMapper 在 Spring Batch 多文件处理中抛出异常

java - 为 Android 编程时是否需要指定列表的初始大小?

java - 使用除 SINGLE_TABLE 之外的任何其他 Hibernate 继承策略时 JVM 崩溃

java - Hibernate StatelessSession 以及 Oracle 和 SQL Server 上的奇怪行为

java - 在 Hibernate 中正确处理长数据

java - Hibernate:相对于自定义@Transactional(timeout)的默认事务超时

java - PhysicalNamingStrategy bean 仅通过配置文件实例化

java - JFXtra 议程仅在特定时间之间显示?

java - 配置 Jackson 而不是使用 DateTimeFormat.ISO.DATE - 不工作