Как я могу настроить Spring Boot JPA Java Entities для автоматической обрезки строк из каждого столбца CHAR? - PullRequest
1 голос
/ 08 мая 2020

Я в шоке, ответ найти нелегко, но - как я могу настроить объекты JPA моего приложения Spring-Boot так, чтобы ВСЕ автоматически обрезали КАЖДОЕ свойство String? с унаследованной базой данных DB2, в которой каждое значение каждого столбца CHAR дополнено конечными пробелами различными приложениями, не зависящими от меня. Существует около 50 взаимосвязанных таблиц со многими столбцами CHAR (N), и мне приходится выполнять бесчисленные преобразования и сравнения с данными, и эти преобразования / сравнения НИКОГДА не работают с конечными пробелами. Так что я обнаружил, что вызываю trim () около миллиарда раз в своем коде. используя Ломбок. Pleeeeaaase скажите мне, что есть способ настроить 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 голос
/ 10 мая 2020

Одним из решений было бы создать собственный преобразователь, например:

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