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")
我有一个 @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")