Мой сценарий очень прост. У меня есть поле entityID
идентичности в @Entity
класса и БД (Oracle, который я не уверен, что вопросы):Как использовать сгенерированный порядковый номер перед сохранением?
@Id
@SequenceGenerator(name="ENTITY_SEQ_GEN", sequenceName="SEQ_GENERIC", allocationSize = 1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ENTITY_SEQ_GEN")
@Column(name="ENTITY_ID")
private long entityID;
У меня есть еще одно поле с именем, скажем, entityReadableID
, и это должно быть строка, состоящая строкового идентификатора объекта, объединенного с другим строковым полем от объекта. Например. если entityID равен , entityReadableID может быть чем-то вроде 1234ABC.
Моя проблема заключается в том, что, насколько мне известно, значение entityID неизвестно до того, как строка создается в БД, но мне нужно объединить entityReadableID, используя его значение. Есть ли способ получить значение идентификатора сгенерированной последовательности до того, как строка будет создана в БД, чтобы я мог использовать ее для генерации другого идентификатора? Я знаю, что могу сделать это вставкой с этим полем, равным нулю, а затем сделать обновление, как только я узнаю, что такое идентификатор сущности, но это решение кажется менее элегантным.
Как я надеюсь, Hibernate/Oracle может поддерживать это, если Hibernate может каким-то образом «зарезервировать/выпустить» следующее сгенерированное значение для обрабатываемой сущности до фактического сохранения, сообщите мне, что это такое. может манипулировать им, а затем в конце упорствовать.
Почему у вас есть это поле в первую очередь? Это избыточно, так как это результат объединения двух других полей. –
, потому что он должен быть сгенерирован по умолчанию, как показано в пользовательском интерфейсе, тогда пользователь может его изменить, если он выбирает – amphibient
. Тогда, боюсь, вам придется упорствовать (и скрывать) объект без этого поля и затем вычислите его. –