Spring Boot JPA:如何更改属性的保存方式

qacovj5a  于 2023-01-24  发布在  Spring
关注(0)|答案(1)|浏览(149)

我需要找到一种使用JPA插入带有属性的实体的方法。其中一个属性表示一个十六进制字符串。由于使用的DB和其他要求,我不得不使用语法X 'stringValue'将此字符串插入DB。
不幸的是我没有找到任何方法来插入这个语法,我尝试用@Query(native sql)和@Columntransformer(X '?'),但是没有任何帮助,因为问号总是被用作字符串,因为它是单引号。
我会需要这样的东西:Hibernate: insert into table (SPECIAL_COLUMN, NORMAL_COLUMN) values (X'?', ?)

4smxwvx5

4smxwvx51#

实现一个AttributeConverter,属性在保存到DB之前,会使用convertToDatabaseColumn()计算其值,当从DB中读取该属性时,会使用convertToEntityAttribute()转换DB中的值,然后设置为该属性。
简而言之,它可以如下所示:

public class XPrefixConverter implements AttributeConverter<String , String> {

    public String convertToDatabaseColumn(String attribute) {
        if (attribute != null) {
            return HexFormat.of().withPrefix("X").formatHex(attribute.getBytes());
        } else {
            return null;
        }
    }

    public String convertToEntityAttribute(String attribute) {
        if (attribute = null) {
            return new String(HexFormat.of().withPrefix("X").parseHex(value));
        } else {
            return null;
        }
    }

}

然后将其用于特定属性:

@Convert( converter = XPrefixConverter.class )
private String hexString;

相关问题