Spring boot - сохранить поле не-id в зависимости от поля id при сохранении объекта - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть поле идентификатора автоинкремента в классе весенней загрузки:

private long id //or it can be int, does not matter

У меня есть еще одно поле, которое должно быть уникальным и буквенно-цифровым, в том же классе:

private String code;

В этом поле будет 6 буквенно-цифровых символов (верхний или нижний регистр не имеет значения).

Можно ли сохранить это поле автоматически при создании нового объекта для этого класса с помощью такого метода?

Long.toString("id_field_value",36);

На самом деле, это дает:

0 -> 0
1 -> 1
10 -> A

Итак, когда будет создан первый объект, id будет 1.

Есть предложения?

Например, когда я сохраняю Person объект,

id будет автоматически равным 1 с JPA - hibarnate.

А также я хочу, чтобы другое поле сохранялось автоматически, в зависимости от поля id.

Итак, id равен 1, что string code также должно быть равно 1.

Должен ли я сделать это после создания объекта? Как:

Персона person = personRepository.save (person3); person.setCode (person.getId (). toString); // или другие функции

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Вы можете попробовать @PostPersist аннотацию.У вас будет идентификатор в вашей сущности, как только он будет сохранен.Что-то вроде:

@PostPersist
private void postPersist() {
    this.setCode( generateMyCode( getId() ) );
}

Это работает нормально, пока используется EntityManager, код поля также должен сохраняться в БД.

При использовании репозиториев Spring может потребоватьсявыполнить дополнительное save() (мне не нужно, только с конфигурацией по умолчанию) после первоначального сохранения, но вы должны проверить этот подход с вашей конфигурацией.

(хранилища Spring обрабатывают контекст персистентности немного по-другому по сравнению ск стандартному использованию JPA с EntityManager.)

0 голосов
/ 13 ноября 2018

Кажется, что столбец code, который вам нужен, это точно столбец id, но с другой кодировкой (основание 36, а не основание 10).

Вам не нужно ни хранить его, нииспользуйте для этого аннотацию постоянства:

  • Для чтения кода: на объекте просто добавьте метод получения getCode(), который вычисляет его на основе значения id.
  • Для поиска по коду просто преобразуйте код из базы 36 в базу 10, а затем выполните поиск по идентификатору.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...