在我們的應用程序中,我們從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>
這是我們的第一個想法,也是我們可能實現的目標。我希望方言或配置改變,但這可能是我們能得到的最好的。謝謝! – markthegrea 2010-04-15 14:52:08
@sliver我不知道在方言級別的東西(這個調整看起來太具體以至於不在方言中),但我可能是錯的。我的感覺是UserType是實現這一點的方式。 – 2010-04-15 15:50:09