2010-04-14 187 views
2

在我們的應用程序中,我們從DB2大型機數據庫中提取數據。如果數據庫在字段中有「低值」,hibernate會在對象中發送一個「null」值。即使該列被定義爲「不爲空」,也會發生這種情況。Hibernate可以將空字符串默認爲空字符串

由於我們正在對此進行XML解析,因此Castor遇到了問題。我想在Hibernate中解決這個問題。而且,所有的hibernate hbm文件都會生成,所以我們不能混淆它們(它們會不時被重新整理)。

任何攔截所有字符串並用「」替換空值的方法?

這是我們想出的解決方案。實際上,這是一個大寫字母並被截斷(大量的抽象方法被刪除)。

public class UpperCaseUserType implements org.hibernate.usertype.UserType{ 
    private static final int[] TYPES = {Types.VARCHAR}; 

    public Object nullSafeGet(ResultSet resultSet, String[] strings, Object object) throws HibernateException, SQLException { 
     //This might be redundant to uppercase the getter... 
     return StringUtils.upperCase((String) Hibernate.STRING.nullSafeGet(resultSet, strings[0])); 
    } 
    public void nullSafeSet(PreparedStatement preparedStatement, Object object, int i) throws HibernateException, SQLException { 
     String string = StringUtils.upperCase((String) object); 
     Hibernate.STRING.nullSafeSet(preparedStatement, string, i); 
    } 
} 

然後你把它掛這樣:

<property name="partNumber" type="cat.dds.fpsdma.model.UpperCaseUserType"> 
     <column name="PART_NUMBER" length="20" not-null="true" /> 
</property> 

回答

2
  • 創建自定義的用戶類型與""
  • 更換null把用戶類型名稱,你通常在reveng.xml把Hibernate類型的名字。
+0

這是我們的第一個想法,也是我們可能實現的目標。我希望方言或配置改變,但這可能是我們能得到的最好的。謝謝! – markthegrea 2010-04-15 14:52:08

+0

@sliver我不知道在方言級別的東西(這個調整看起來太具體以至於不在方言中),但我可能是錯的。我的感覺是UserType是實現這一點的方式。 – 2010-04-15 15:50:09