Кто-то знает, как конкатенация идентификатора генерируется по последовательности и любому другому свойству с помощью пружины jpa, прежде чем сохранять? - PullRequest
0 голосов
/ 16 апреля 2020

Представьте, что это сущность с четко определенной структурой

public class Entyty{
//genarate by sequence
private Long id;
//value coming from request
private String value;
//I need concatenate this value with id + value before to save in db
private String composeValue;

}

кто-то знает, как это сделать?

1 Ответ

1 голос
/ 16 апреля 2020

Вы не можете сделать это с обычным процессом JPA.

Причина довольно очевидна: идентификатор генерируется только тогда, когда сущность сохраняется.

Таким образом, вам нужно либо сделать ваше требование более мягким, либо вручную назначить идентификатор. Если это важно для вас, оно все еще может происходить из последовательности.

Итак, вот несколько вариантов, которые могут оказаться полезными:

  1. Сгенерируйте идентификатор вручную. Вы можете выбрать следующее значение для последовательности из базы данных, используя обычный запрос SQL, и использовать его для установки идентификатора любого нового объекта. Затем вы можете использовать обычный код java для объединения его с другим свойством.

  2. У вас может быть только метод получения, который будет принимать идентификатор, а другое свойство объединять их и возвращать результат. Как только свойство и идентификатор будут установлены, получатель вернет правильный результат. До этого не так уж много.

  3. Вы можете заполнить поле в базе данных с помощью триггера. Если вы хотите, вы можете выбрать дополнительное поле или просто сохранить его в базе данных.

  4. Вместо использования триггера вы можете использовать представление и заставить вид собрать дополнительное поле. Если вы используете его в выражениях where или аналогичных, вы можете поместить в него индекс на основе функций.

...