Это действительно должно быть случайным? Или просто уникальный? Получение «случайного» числа не может действительно гарантировать его уникальность во всем или даже во времени.
Первая мысль, которая приходит в голову, это иметь объект синглтонного типа, который просто добавляет 1 к предыдущему числу (или использует последовательность базы данных). Не устанавливайте его, пока вы действительно не попытаетесь сохранить все дерево. Ваш синглтон может заполнить себя самым большим постоянным номером задания + 1.
Я также использовал только строку метки времени, могу убедиться, что она уникальна, добавив уникальное значение сеанса. то есть .. user_id + "-" + new Date (). время
EDIT:
Бины, объявленные в Spring (grails), по умолчанию являются синглетонами (один экземпляр для контейнера, а не шаблон Singleton). Таким образом, каждый раз, когда вы автоматически подключаете / внедряете бин, это один и тот же экземпляр во всей системе. Затем вы добавляете синхронизированный метод, чтобы получить следующее значение. Вы можете подключить компонент к началу, чтобы получить его начальное значение (начальное значение) из наибольшего постоянного (назначенного) значения из базы данных при запуске контейнера.
Использование последовательности базы данных немного отличается, так как она полагается на базовую базу данных для присвоения значения, но это будет делать то же самое. Вы должны иметь возможность определить поле в доменном объекте для автоматического назначения значения, заданного последовательностью.
Посмотрите на http://mycodesnippets.com/2010/03/30/sequence-generation-with-gorm/ Но для вашего сценария вы бы хотели, чтобы генератор был в вашем поле jobNumber. (Не уверен на 100%, что это сработает, никогда не пробовал ни в одном поле, кроме id)