有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我正在使用一个遗留的DB2数据库,其中每个CHAR列的每个值都由我无法控制的各种应用程序用尾随空格填充。大约有50个相互关联的表,其中有许多CHAR(N)列,我必须对数据进行无数次转换和比较,而这些转换/比较从来都不适用于尾随空间。所以我发现自己在代码中调用trim()大约10亿次

重写实体POJO类的getter/setter方法感觉很恶心,因为有数百种方法,而且我刚刚用Lombok将它们全部去掉。请告诉我有一种配置Spring/Hibernate的方法,可以自动从每个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;
}

共 (1) 个答案

  1. # 1 楼答案

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

    @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;