Я вынужден управлять полем автоинкремента из кода. Я решил написать хранимую процедуру, чтобы сделать это для меня. Идея состоит в том, чтобы иметь процедуру, которая вставляет новую строку и возвращает автоматически увеличенное значение 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 для всех помощи.