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來堅持和檢索對象,但顯然這是無用的。任何幫助非常感謝,如果你想看到錯誤消息等只是讓我知道。我看到'解決方案'似乎是我正在嘗試的,或者有人說他使用了「蠻力解決方法」,但沒有描述這是什麼意思。
這是一個雞和雞蛋的問題。如果您的ID是由觸發器生成的(正如我所假設的那樣),則需要另一個唯一ID才能夠獲取剛插入的行,並從中獲取由觸發器生成的ID。你爲什麼不先生成ID,然後把它分配給你的實體並堅持下去? – 2013-03-09 14:54:58
感謝您的回覆。我們希望數據庫生成uniqueID而不是代碼。也許我們可以讓數據庫生成一個沒有日期戳記的序列。從我讀過的例子看來,我可以通過@generatedvalue(strategy = generationtype.sequence)引用該序列?這是我可能觸發,如果我嘗試只是一個普通的序列: – JMag 2013-03-09 16:14:13
'如果在插入然後 如果:new.UNIQUE_ID爲null,則 選擇ourSchema.USERS_seq.nextval 到:new.UNIQUE_ID 從DUAL; end if; 結束如果;' – JMag 2013-03-09 16:15:06