2013-03-09 76 views
1

我在Oracle中有一個唯一的date + sequence序列號。例如:20130307-000021在持續JPA後返回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); 

以上是我已經嘗試了一些不同的東西。當我使用刷新時,我得到一個錯誤,說沒有找到「實體」(我假設它正在查找實體基於預先保持uniqueID爲null。是否有可能找回自動生成日期+序列號?我'能夠通過查看插入的對象並直接複製uniqueID來堅持和檢索對象,但顯然這是無用的。任何幫助非常感謝,如果你想看到錯誤消息等只是讓我知道。我看到'解決方案'似乎是我正在嘗試的,或者有人說他使用了「蠻力解決方法」,但沒有描述這是什麼意思。

+0

這是一個雞和雞蛋的問題。如果您的ID是由觸發器生成的(正如我所假設的那樣),則需要另一個唯一ID才能夠獲取剛插入的行,並從中獲取由觸發器生成的ID。你爲什麼不先生成ID,然後把它分配給你的實體並堅持下去? – 2013-03-09 14:54:58

+0

感謝您的回覆。我們希望數據庫生成uniqueID而不是代碼。也許我們可以讓數據庫生成一個沒有日期戳記的序列。從我讀過的例子看來,我可以通過@generatedvalue(strategy = generationtype.sequence)引用該序列?這是我可能觸發,如果我嘗試只是一個普通的序列: – JMag 2013-03-09 16:14:13

+0

'如果在插入然後 如果:new.UNIQUE_ID爲null,則 選擇ourSchema.USERS_seq.nextval 到:new.UNIQUE_ID 從DUAL; end if; 結束如果;' – JMag 2013-03-09 16:15:06

回答

0

對於任何可能發生此事的人。我保留了數據庫觸發器,只是用於:

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

我不需要使用@GeneratedValue或其任何變體。