В нашем приложении мы получаем данные из базы данных мэйнфрейма DB2. Если база данных имеет «низкие значения» в поле, hibernate отправляет «нулевое» значение в объекте. Это происходит, даже если столбец определен как «не ноль».
Поскольку мы делаем анализ XML на этом, у Кастора возникли проблемы с этим. Я хотел бы исправить это в 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>