2011-04-01 23 views
2

的平等限制休眠空字符串扩展上 How does hibernate use an empty string for an equality restriction?为PostgreSQL 8.3版本和Oracle 11g

我有一个关于如何检查的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(这将永远是假的)的休眠使甲骨文解释“”为空值。

那么我该如何使数据库平台不可知的功能(因为现在我必须检测哪个数据库正在运行,PostgreSQL或Oracle)?

还是我完全误解了一些东西?

回答

2

使用nullif(val, '')存储的值时,强迫Postgres的表现,如Oracle

+0

好,谢谢杰克将不得不测试它:) – portoalet 2011-04-01 11:25:41