2011-04-01 48 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