2013-03-09 2 views
1

У меня есть уникальный идентификатор даты + последовательность в Oracle. Пример: 20130307-000021Получить обратно UniqueID после сохранения JPA

Мой объект объект UniqueID выглядит следующим образом:

@Id 
// @GeneratedValue 
// @Basic(optional = false) 
// @NotNull 
// @Size(min = 1, max = 15) 
@Column(name = "UNIQUE_ID") 
private String uniqueId; 

В любое время я использую @GeneratedValue или это варианты я получаю «последовательность не найдена» или какой-либо другой ошибки. Я пытаюсь вернуть уникальный идентификатор, созданный базой данных Oracle после того, как я сохраню объект.

 this.dbConn.persist(orderDetail); 
     this.dbConn.flush(); 
     //this.dbConn.refresh(orderDetail); 
     //OrderDetails od = new OrderDetails(); 
     //od =(OrderDetails)this.dbConn.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(orderDetail); 

Выше были некоторые различные вещи, которые я пробовал. Когда я использую обновление, я получаю сообщение об ошибке «Сущность» не найден (я предполагаю, что он ищет объект на основе предварительно сохраненного уникального идентификатора null. Возможно ли вернуть эту автоматически созданную дату + порядковый номер? m, способный постоянно сохранять и извлекать объекты, просматривая вставленный объект и копируя уникальный идентификатор напрямую, но, очевидно, это бесполезно. Любая помощь очень ценится, и если вы хотите видеть сообщения об ошибках и т. д., просто дайте мне знать. и я либо вижу «решения», которые кажутся тем, что я пытаюсь, либо один человек сказал, что он использовал «грубую работу», но не описал, что это значит.

+0

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

+0

Спасибо за ответ. Мы хотели, чтобы база данных генерировала уникальный идентификатор, а не код. Возможно, мы просто можем создать базу данных без этой отметки даты. Из примеров, которые я прочитал, казалось бы, я могу ссылаться на эту последовательность через @generatedvalue (strategy = generationtype.sequence)? Вот мой возможный триггер, если я пытаюсь только простую последовательность: – JMag

+0

'если INSERTING то если: new.UNIQUE_ID равно нулю, то выберите ourSchema.USERS_seq.nextval в: new.UNIQUE_ID от DUAL; end if; End If; ' – JMag

ответ

0

Для всех, кто может это произойти. Я сохранил триггер базы данных и только что использовал:

@Id 
@Basic(optional = false) 
@NotNull 
@Size(min = 1, max = 15) 
@Column(name = "ORDER_ID") 
private String orderId; 

Мне не нужно было использовать @GeneratedValue или любой из его вариантов.

Смежные вопросы