在How does hibernate use an empty string for an equality restriction?上扩展
我遇到了一个关于如何使用Hibernate限制检查Oracle11g和PostgreSQL之间的空字符串的问题
对于我的特定应用程序,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 (始终为false),因为Hibernate使Oracle将"“解释为NULL。
那么,如何使函数与数据库平台无关(因为现在我必须检测哪个数据库正在运行,是PostgreSQL还是Oracle)?
还是我完全误解了什么?
发布于 2011-04-01 17:48:54
在存储值时使用nullif(val, ''),以强制Postgres的行为类似于Oracle
https://stackoverflow.com/questions/5510275
复制相似问题