Hibernate空字符串,用于PostgreSQL 8.3和Oracle 11g的相等限制

时间:2011-04-01 07:19:34

标签: sql oracle hibernate postgresql criteria

延伸 How does hibernate use an empty string for an equality restriction?

我遇到了如何在Oracle 11g和PostgreSQL之间检查空字符串的问题 使用Hibernate限制

对于我的具体应用, PostgreSQL使用2个单引号保存空值 而Oracle将空值保存为NULL

检查值是否为空的代码是

 public void AssureNotEmpty() { ...

     //For Oracle 11g    
     valueRestriction = Restrictions.isNotNull(propertyValueAlias);


     //For PostgreSQL
     valueRestriction = Restrictions.and(Restrictions.isNotNull(propertyValueAlias),
                        Restrictions.ne(propertyValueAlias, ""));

当值为非空时,Restrictions.ne(propertyValueAlias,“”)在Oracle上失败,因为它将被解释为值!= NULL(总是为假),因为Hibernate使Oracle将“”解释为NULL。“ p>

那么如何才能使数据库与平台无关(因为现在我必须检测正在运行的数据库,PostgreSQL还是Oracle)?

还是我完全误解了什么?

1 个答案:

答案 0 :(得分:2)

在存储值时使用nullif(val, '')来强制Postgres行为像Oracle