延伸 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)?
还是我完全误解了什么?
答案 0 :(得分:2)
在存储值时使用nullif(val, '')
来强制Postgres行为像Oracle