【问题标题】:Hibernate empty string for an equality restriction for PostgreSQL 8.3 and Oracle 11g用于 PostgreSQL 8.3 和 Oracle 11g 的相等限制的休眠空字符串
【发布时间】:2011-07-27 11:40:10
【问题描述】:

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

我遇到了关于如何在 Oracle 11g 和 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 上失败,因为它将被解释为 value != NULL(始终为 false),因为 Hibernate 使 Oracle 将 "" 解释为 NULL。

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

还是我完全误解了什么?

【问题讨论】:

    标签: sql oracle hibernate postgresql criteria


    【解决方案1】:

    在存储值时使用nullif(val, '') 强制 Postgres 像 Oracle 一样工作

    【讨论】:

      猜你喜欢
      • 2014-08-21
      • 2011-05-05
      • 2010-11-14
      • 1970-01-01
      • 2010-12-13
      • 2012-11-16
      • 2011-05-21
      • 1970-01-01
      • 2017-08-13
      相关资源
      最近更新 更多