В нашем приложении мы извлекаем данные из базы данных мейнфреймов DB2. Если база данных имеет «низкие значения» в поле, hibernate отправляет «нулевое» значение в объекте. Это происходит, даже если столбец определяется как «не null».Может Hibernate по умолчанию для Null String для пустой строки
Поскольку мы делаем синтаксический анализ XML на этом, у Кастора возникают проблемы с ним. Я хотел бы исправить это в Hibernate. Кроме того, генерируются все файлы hibm hibernate, поэтому мы не можем с ними общаться (они время от времени обновляются).
Любой способ перехватить все строки и заменить нули на ""?
Вот решение, с которым мы столкнулись. На самом деле, это верхний регистр и усечен (многие абстрактные методы удалены).
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
@sliver Я не знаю о чем-то подобном на уровне диалекта (эта настройка кажется слишком специфичной, чтобы быть на диалекте), но я могу ошибаться. Я чувствую, что UserType - это способ реализовать это. –