Программно изменить значение по умолчанию для @Column с JPA - PullRequest
0 голосов
/ 03 октября 2018

Учитывая, что у меня есть поле, помеченное @Column, JPA назначит имя dafult для столбца в базе данных из имени поля.EG:

@Column
private String someString;

В этом случае столбец в БД будет называться SOMESTRING.

Мне бы хотелось, чтобы в этом же поле была другая аннотация с правилами для получения столбца базы данных.имя будет другим.Например, "_" + FIELDNAME.

EG:

@Column
@SpecialColumn
private String someString;

В этом случае имя столбца должно быть: _SOMESTRING

Как лучше всего это сделать?Спасибо!

1 Ответ

0 голосов
/ 04 октября 2018

Невозможно сделать это с простым JPA.

Сначала все выглядит так, как будто это возможно с Hibernate.

Hibernate разбивает определение имен столбцов на двапроцесс

  1. определяет «логическое» имя.По умолчанию это то, что вы указываете в аннотации @Column.

  2. преобразует это в «физическое» имя.Фактическое имя столбца таблицы базы данных.

Так что, похоже, то, что вы пытаетесь сделать, должно быть сделано на втором шаге, PhysicalNamingStrategy.Проблема, однако, в том, что на втором этапе нет никакой информации, откуда поступают эти данные, поэтому нет простого способа определить, присутствует ли @SpecialColumn.

Но я думаю, что можно настроитьпервый шаг с использованием пользовательского ImplicitNamingStrategy для кодирования этой информации в логическом имени, например, с использованием суффикса.К сожалению, это не дает вам легкого доступа к Field или Method, где вы можете найти свою аннотацию.Кажется, только AttributePath доступны, и я не уверен, достаточно ли это для вашей цели.Но я думаю, что это твой единственный шанс.

...