Как сопоставить свойство класса Java, которое является объектом, с одним столбцом таблицы JPA? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть веб-служба Sprint Boot, использующая JPA для сопоставления с базовой базой данных SQL.

У одного из классов домена есть свойство, представляющее собой сложный объект Java, с которым я не хочу сохранятьнормальные сопоставленные / объединенные таблицы.Вместо этого я хочу сопоставить этот Java-объект одному столбцу в основной таблице и в идеале сохранить данные в формате JSON в строковом столбце.

Есть предложения?

1 Ответ

1 голос
/ 23 сентября 2019

Вы можете использовать jpa's AttributeConverter :

@Converter
public class MyObjectConverter implements AttributeConverter<MyObject, String> {
 @Override
 public String convertToDatabaseColumn(MyObject myObject) {
    //convert myobject to json: for instance use ObjectMapper from Jackson
    if( myObject == null )
        return null;

    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(myObject );
 }

 @Override
 public MyObject convertToEntityAttribute(String myObjectString) {
    // convert myObjectString back to object
    if( myObjectString== null )
        return null;

    ObjectMapper mapper = new ObjectMapper();
    return mapper.readValue(myObjectString, MyObject.class);
 }  
}

и использовать его в своей сущности как ..

@Column
@Converter(converter = MyObjectConverter.class)
MyObject myObject;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...