数据库值为空的Hibernate AttributeConverter
我正在编写属性转换器,以在存储到数据库时将模型转换为JSON字符串,并在从数据库读取时将JSON字符串转换回模型。 当它有数据时,它工作正常 嗯,这个模型有一个集合。当集合为空时(默认情况下初始化为空),在写入db时,我需要写入数据库值为空的Hibernate AttributeConverter,hibernate,jpa,Hibernate,Jpa,我正在编写属性转换器,以在存储到数据库时将模型转换为JSON字符串,并在从数据库读取时将JSON字符串转换回模型。 当它有数据时,它工作正常 嗯,这个模型有一个集合。当集合为空时(默认情况下初始化为空),在写入db时,我需要写入null,而不是像{values:{}}这样的内容。这个很好用。 虽然我正在检查db内容是否为空,但在从db读取时,我希望实体中的字段具有集合为空的模型实例 public class MyWarningsJsonConverter implements Attri
null
,而不是像{values:{}}
这样的内容。这个很好用。
虽然我正在检查db内容是否为空,但在从db读取时,我希望实体中的字段具有集合为空的模型实例
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();
}
}
问题似乎出在org.hibernate.type.descriptor.sql.BasicExtractor.extract
中。如果resultset内容为null,则此代码返回null
if ( value == null || rs.wasNull() ) { //rs resultset
return null;
}
所以,在读取警告为null的行时,我希望实体具有集合为空的MyWarnings实例,但我得到的是null。我该怎么做呢?Hibernate的哪个特定版本?我发现将转换的对象字段设置为
@Transient
并使用@PrePersist
,@PreUpdate
和@PostLoad
从字符串值转换它要比处理AttributeConverter容易得多。Hibernate版本4.3.7
if ( value == null || rs.wasNull() ) { //rs resultset
return null;
}