簡體   English   中英

Spring 引導 JPA:如何更改屬性的保存方式

[英]Spring Boot JPA: How to change the way an attribute is saved

我需要找到一種使用 JPA 插入具有屬性的實體的方法。其中一個屬性代表一個十六進制字符串。 由於使用了 DB 和其他要求,我不得不將此字符串與語法 X'stringValue' 插入到 DB 中。

不幸的是,我沒有找到任何方法來插入這種語法。 我嘗試使用@Query(本機 sql)和@Columntransformer(X'?'),但沒有任何幫助,因為由於單引號,問號始終用作字符串。

我需要這樣的東西: Hibernate: insert into table (SPECIAL_COLUMN, NORMAL_COLUMN) values (X'?', ?)

實現一個AttributeConverter 在將屬性保存到數據庫之前,將使用convertToDatabaseColumn()計算其值。 當您從數據庫中讀取此屬性時,數據庫中的值將使用convertToEntityAttribute()進行轉換,然后設置為該屬性。

簡而言之,它可以如下所示:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM