Может ли Hibernate использовать по умолчанию пустую строку для пустой строки - PullRequest
2 голосов
/ 14 апреля 2010

В нашем приложении мы получаем данные из базы данных мэйнфрейма 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>

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010
  • Создание пользовательского типа для замены null на ""
  • Поместите имя типа пользователя туда, где вы обычно помещаете имя спящего режима в reveng.xml.
0 голосов
/ 14 апреля 2010

Вы можете использовать перехватчик hibernate, который расширяет EmptyInterceptor для выполнения операции, которую вы хотите выполнить перед тем, как запустить этот запрос.

пример, приведенный здесь, может вам помочь

http://www.mkyong.com/hibernate/hibernate-interceptor-example-audit-log/

...