Избегайте обрезки CHAR при использовании eclipselink

У меня есть несколько таблиц Oracle, в которых некоторые поля PK определены как CHAR (9), и все значения хранятся с дополнением.

Таким образом, я должен получить все объекты с пробелами в ключевых полях. Однако когда EclipseLink считывает данные в объект, пробелы обрезаются. Поскольку это происходит со значениями ID, я не могу использовать @PostLoad, чтобы «исправить» ключ, чтобы он содержал пробелы.

У меня нет возможности удалить/обновить объект, так как значение ключа изменяется на обрезанное значение, и любое обновление/удаление пропускает значение ключа.

Как я могу настроить свой блок сохранения, чтобы он не обрезал значения для столбцов CHAR?


person Frode Halvorsen    schedule 12.11.2012    source источник


Ответы (1)


Вы можете использовать SessionCustomizer для настройки этого,

public MyCustomizer implements SessionCustomizer {
  public customize(Session session) {
    session.getLogin().setShouldTrimStrings(false);
  }
}

Но вообще использование CHAR вместо VARCHAR обычно очень плохая идея.

person James    schedule 13.11.2012
comment
Это отлично работает, спасибо. Я не указал использование CHAR, и да, это вообще плохая идея... - person Frode Halvorsen; 24.11.2012
comment
Круто.. сработало... Также укажите эту запись в файле persistance.xml ‹property name=eclipselink.session.customizer value=package.SessionCustomizer /› - person Prasobh.Kollattu; 04.07.2018