entitymanager – JPA 2.1 Type Converter不会在NULL值上执行

我正在测试新的JPA 2.1类型转换器.我想避免将NULL String值存储在旧数据库中,因为它们是不允许的.所以我定义了以下转换器:

@Converter(autoApply=true)  
public class CString implements AttributeConverter<String, String> {  

    @Override  
    public String convertToDatabaseColumn(String str) {  
        if( str == null || str.length() == 0 ) {  
            return " ";
        } else {
            return str;
        }
    }

    @Override
    public String convertToEntityAttribute(String str) {
        if( str == null || str.length() == 0 || str.equals(" ") ) {
            return null;
        } else {
            return str;
        }
    }

}  

如果字符串属性为NULL,则应将其转换为空格字符,但如果属性为NULL,则不会执行转换器方法.
我正在尝试hibernate-jpa-2.1-api(1.0.0.Final)和hibernate-entitymanager(4.3.6.Final).
是否有任何符合JPA 2.1标准的方法来解决这个问题?

最佳答案 更新:这个错误已在最新的Hibernate
5.0.0.Beta1中作为JIRA问题
HHH-8697的一部分得到解决,并且一旦从
4.3.9-SNAPSHOT版本发布就会在Hibernate 4.3.9中解决

如果您不想升级到测试版,可以使用解决方法:查看JPA/Hibernate map null,它解释了如何使用getter和setter来实现您的逻辑.

点赞