Получение значения последовательности hibernate / Знание идентификатора hibernate вставлен - PullRequest
2 голосов
/ 02 ноября 2010

У меня есть две таблицы.Одна таблица имеет последовательность, а другая - нет.Мне нужно использовать тот же идентификатор, который был вставлен во вторую таблицу для деловых целей.

В настоящее время я получаю максимум, используя прогнозы и увеличивая его.используя это значение для вставки в две таблицы.

мне нужно использовать значение последовательности одной таблицы и вставить то же значение в другую таблицу?как это можно сделать?

Ответы [ 2 ]

1 голос
/ 02 ноября 2010

Я не знаю, как hibernate изменит это, но обычно вы можете использовать возвращающее предложение, чтобы получить значение только что вставленных данных:

-- Create Objects
create table x
(id number, txt varchar2(50));

create table y
(id number, txt varchar2(50));

create sequence seq;

-- Insert into x, retrieve value of sequence used in insert
-- then use that to insert into y
declare
    v_seq NUMBER;
begin
    insert into x
    (id, txt)
    values
    (seq.nextval, 'test')
    returning id
    into v_seq;

    insert into y
    (id, txt)
    values
    (v_seq, 'test2');
end;
0 голосов
/ 04 ноября 2010

У меня нет возможности комментировать, но ваш вопрос не ясен.

Многие (все?) Базы данных не связывают последовательность с таблицей.Я мог бы сделать (псевдокод):

CREATE TABLE x (value INT PRIMARY KEY);
CREATE TABLE y (value INT PRIMARY KEY);

INSERT INTO x (SELECT sequence_my_seq.nextval());
INSERT INTO y (SELECT sequence_my_seq.nextval());

Предполагая, что вы используете Java и у вас есть объект Hibernate и вам нужно что-то делать с идентификатором, сгенерированным оператором INSERT вне мира Hibernate:

Предположим, что MyHibernateMappedObj является объектом, отображенным в Hibernate:

MyHibernateMappedObj myHibernateObj = new MyHibernateMappedObj();
Assert.isNull(muHibernateObj.getId());

getCurrentHibernateSession().save(obj);

Assert.isNotNull(myHibernateObj.getId());

doSomethingWithNewId(myHibernateObj.getId());

, тогда в 'obj' будет заполнено поле 'id'.Если ваша вторая таблица сопоставлена ​​с классом / entityName в Hibernate, Hibernate позаботится об этом за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...