具有空数据库值的Hibernate AttributeConverter

时间:2017-03-23 12:20:00

标签: hibernate jpa

我正在编写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。我怎么能这样做?

0 个答案:

没有答案