我被迫從代碼管理自動增量字段。我決定寫一個存儲過程爲我做這個。我們的想法是創建一個插入新行的過程,並將自動遞增的值返回給Java,以便我可以繼續使用它。以下是我目前爲止的內容。我不知道要改變什麼才能填補空白,使其全部工作。休眠存儲過程結果
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE addNewMSO
@sourceApplication char(8),
@selectionStatusDate datetime = NULL,
@sysLstUpdtUserId char(10)
AS
BEGIN
SET NOCOUNT ON;
Declare @newVal int
SET @newVal = (select max(seqNo) from MemberSelectedOptions) + 1
INSERT INTO MemberSelectedOptions
([SourceApplication]
,[SeqNo]
,[SelectionStatusDate]
,[SysLstUpdtUserId])
VALUES
(@sourceApplication
,@newVal
,@selectionStatusDate
,@sysLstUpdtUserId)
END
GO
然後在我的Java代碼中,我有以下幾點。
@NamedNativeQuery(name="addNewMSO",
query="exec addNewMSO :sourceApplication :selectionStatusDate :sysLstUpdtUserId", callable=true)
我的DAO調用它像這樣...
Query q = session.getNamedQuery("addNewMSO");
q.setParameter("sourceApplication", mso.getSourceApplication());
q.setParameter("selectionStatusDate", mso.getSelectionStatusDate());
q.setParameter("sysLstUpdtUserId", mso.getSysLstUpdtUserId());
q.executeUpdate();
即使是這樣,這是不行的,因爲我得到一個「純天然標量的查詢尚不支持」錯誤。所以我不知道下一步該去哪裏。我已經閱讀了Hibernate文檔,但我不知道如何從SP獲取返回值。但我仍然無法稱之爲......呃!
TIA對所有幫助。