Hibernate: хранить список как JSON, используя @JsonSerialize и Converter: Basi c атрибут не должен быть контейнером - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть @Entity с полем List<List<Integer>>:

@Entity
public class Game  {
  @Column
  List<List<Integer>> field;
}

Я хочу сохранить его как JSON в базе данных через Hibernate. Я пытался:

 @JsonSerialize(converter = FieldConverter.class)
 @JsonDeserialize(converter = FieldDeconverter.class)
 private List<List<Integer>> field;
@Converter
public class FieldConverter extends StdConverter<List<List<Integer>>, String> {
    @Override
    public String convert(List<List<Integer>> field)  {
        return "test-field";
    }
}
@Converter
public class FieldDeconverter extends StdConverter<String, List<List<Integer>>> {
    @Override
    public List<List<Integer>> convert(String field)  {
        return null;
    }
}

, но я получаю Basic attribute should not be a container ошибку.

Я также пробовал это:

public class FieldConverter1 implements AttributeConverter<List<List<Integer>>, String> {
    @Override
    public String convertToDatabaseColumn(List<List<Integer>> attribute) {
        return "test";
    }

    @Override
    public List<List<Integer>> convertToEntityAttribute(String dbData) {
        return null;
    }
}
@Column
@Convert(converter = FieldConverter1.class)
private List<List<Integer>> field;

но ошибка выводится:

enter image description here

1 Ответ

1 голос
/ 29 февраля 2020

Довольно странная проблема, если вы все сделали правильно и попытались перезапустить IDE и пересобрать проект.

Я скопировал ваш класс FieldConverter1 и создал тот же field в моей сущности и не получил ошибки, я предполагаю, что когда вы запускаете свой проект, он работает гладко, даже если IDE показывает эту ошибку.

После некоторых исследований в некоторых старых версиях IntelliJ IDEA обнаружена известная ошибка, но она исправлена ​​в новых версиях. Было упомянуто здесь и здесь .

Если вы можете, попробуйте обновить IntelliJ, поскольку это должно исправить эту проблему.
Вы также можете отключить / отредактировать или отменить эту проверку, если вы просто хотите избавиться от этой ошибки: IntelliJ inspection options Например, отключить проверку только для этого поля, используя эту аннотацию:

@SuppressWarnings("JpaAttributeTypeInspection")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...