数据库值为空的Hibernate AttributeConverter

数据库值为空的Hibernate AttributeConverter,hibernate,jpa,Hibernate,Jpa,我正在编写属性转换器,以在存储到数据库时将模型转换为JSON字符串,并在从数据库读取时将JSON字符串转换回模型。 当它有数据时,它工作正常 嗯,这个模型有一个集合。当集合为空时(默认情况下初始化为空),在写入db时,我需要写入null,而不是像{values:{}}这样的内容。这个很好用。 虽然我正在检查db内容是否为空,但在从db读取时,我希望实体中的字段具有集合为空的模型实例 public class MyWarningsJsonConverter implements Attri

我正在编写属性转换器,以在存储到数据库时将模型转换为JSON字符串,并在从数据库读取时将JSON字符串转换回模型。 当它有数据时,它工作正常

嗯,这个模型有一个集合。当集合为空时(默认情况下初始化为空),在写入db时,我需要写入
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;
    }