我正在编写Attribute转换器,将模型转换为JSON字符串,同时存储到数据库并在从数据库读取时将JSON字符串转换回模型。 它有数据时工作正常。
嗯,该模型拥有一个集合。当集合为空时,默认情况下它被初始化为什么,在写入db时我需要编写null
而不是{ values : {} }
之类的东西。这很好用。
虽然我正在检查数据库内容是否为null,但是我希望在实体中读取具有空集合的模型实例。
public class MyWarningsJsonConverter implements AttributeConverter<MyWarnings, String> {
@Override
public String convertToDatabaseColumn(final MyWarnings warnings) {
if ( null != warnings && (!warnings.isEmpty()) ) {
return JSON_CONVERTED_WARNINGS;
}
return null;
}
@Override
public MyWarnings convertToEntityAttribute(final String dbData) {
if (null != dbData) {
return MODEL_FROM_JSON_OF_DBDATA;
}
//this executes. But gets overridden by hibernate to null
return MyWarnings.createNew();
}
}
实体具有类似
的模型 @Column(name = "warnings")
@Convert(converter = MyWarningsJsonConverter.class)
private MyWarnings warnings = MyWarnings.createNew();
问题似乎出现在org.hibernate.type.descriptor.sql.BasicExtractor.extract
中。如果结果集内容为null,则此代码返回null。
if ( value == null || rs.wasNull() ) { //rs resultset
return null;
}
因此,在读取行为null警告我希望实体具有空集合的MyWarnings实例,但我得到null。我怎么能这样做?