Hibernate:使用@JsonSerialize 和 Converter 将列表存储为 JSON:Basic 属性不应是容器

Hibernate: store List as JSON using @JsonSerialize and Converter: Basic attribute should not be a container

我有一个 @Entity 有一个 List<List<Integer>> 字段:

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

我想通过 Hibernate 在数据库中将其保存为 JSON。 我试过了:

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

但错误仍然存​​在:

如果您已正确完成其余部分并尝试重新启动 IDE 并重建项目,则会出现非常奇怪的问题。

我复制了你的 FieldConverter1 class 并在我的实体中创建了相同的 field 并且没有出现错误,我假设你 运行 你的项目它运行顺利,即使IDE 显示该错误。

经过一些研究,它似乎是某些旧版本 IntelliJ IDEA 中的已知错误,但它已在较新版本中修复。有人提到 here and here

如果可以,请尝试升级 IntelliJ,因为它应该可以解决该问题。
如果您只想消除该错误,也可以 disable/edit 或取消该检查: 例如,使用此注释仅针对该字段禁用检查:

@SuppressWarnings("JpaAttributeTypeInspection")