MSSQL(2008年)和的EclipseLink(2.4)的EclipseLink記錄插入返回錯誤ID
我插入到表與觸發器,它不插入到另一個表
當這種情況發生的EclipseLink返回ID通過觸發器插入另一個表中的記錄。
我假設我可以通過讓EcliipseLink使用SCOPE_IDENTITY()而不是@@ IDENTITY來獲得正確的ID。
問題是如何做到這一點?
我需要EclipseLink(JPA)的解決方案,我知道如何使用sql獲取id。
MSSQL(2008年)和的EclipseLink(2.4)的EclipseLink記錄插入返回錯誤ID
我插入到表與觸發器,它不插入到另一個表
當這種情況發生的EclipseLink返回ID通過觸發器插入另一個表中的記錄。
我假設我可以通過讓EcliipseLink使用SCOPE_IDENTITY()而不是@@ IDENTITY來獲得正確的ID。
問題是如何做到這一點?
我需要EclipseLink(JPA)的解決方案,我知道如何使用sql獲取id。
TableA
有一個插入另一個表的觸發器。您發出命令如..
INSERT INTO TableA (Field1, Field2) VALUES (@Value1, @Value2); SELECT SCOPE_IDENTITY() As MyRecID
這將記錄插入TableA
並返回該記錄的ID
。
欲瞭解更多信息閱讀SCOPE_IDENTITY (Transact-SQL)
我編輯了我的問題,使其更清晰,我需要EclipseLink的解決方案。我很清楚SCOPE_IDENTITY()會返回id - 問題是讓EclipseLink來完成它。 – 2014-11-05 23:52:56
有添加自定義序列對象的EclipseLink解決這裏這個問題的一個例子:http://helpdesk.ibs-aachen.de/2009/08/27/eclipselink-ms-sql-server-identity/
不幸的是,這個例子已經過時了。它也使用IDENT_CURRENT,它將返回表中任何連接的任何插入的最後一個ID。它不能簡單地切換到SCOPE_IDENTITY,因爲看起來EclipseLink正在彙集連接並在另一個連接上調用SCOPE_IDENTITY返回null! – 2014-11-06 23:56:58
ShouldAcquireValueAfterInsert標誌在序列上是否設置爲true?另一種替代方法是對SQLServerPlatform和overrid buildSelectQueryForIdentity方法進行子類化以返回您自己的查詢。然後使用http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_target_database.htm – Chris 2014-11-07 15:39:51
將其添加到持久性單元中。我將SQLServerPlatform的子類化爲使用scope_identity(),並且它仍然返回null。然後我直接通過JDBC嘗試使用scope_identity,它仍然返回null!我可以通過JDBC獲取id的唯一方法是在我用來執行查詢的語句對象上使用getGeneratedKeys。 – 2014-11-11 03:00:34
你'Insert'後'選擇@IDImAfter = SCOPE_IDENTITY()'將從您插入的表格中返回ID,而不是觸發器插入的表格。 – Fred 2014-11-05 21:23:10
我編輯了我的問題,使其更清晰,我需要EclipseLink的解決方案。我很清楚SCOPE_IDENTITY()會返回id - 問題是讓EclipseLink來完成它。 – 2014-11-05 23:52:27