获取hibernate的序列值/知道插入的id hibernate

时间:2010-11-02 05:55:34

标签: oracle hibernate

我有两张桌子。一个表有序列和其他表没有。为了商业目的,我需要使用插入第二个表的相同ID。

目前我正在使用投影获得最大值并将其递增。在两个表中使用此值进行插入。

我需要使用一个表的序列值并在另一个表中插入相同的值吗?怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

我不知道hibernate将如何改变它,但通常你可以使用returns子句来获取刚刚插入的数据的值:

-- 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;

答案 1 :(得分:0)

我没有评论的能力但你的问题不明确。

许多(所有?)数据库不会将序列与表关联。我可以做(伪代码):

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对象,并且需要对Hibernate世界之外的INSERT语句生成的id做一些事情:

假设MyHibernateMappedObj是一个在Hibernate中映射的对象:

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

getCurrentHibernateSession().save(obj);

Assert.isNotNull(myHibernateObj.getId());

doSomethingWithNewId(myHibernateObj.getId());

然后'obj'将填充其'id'字段。如果您的第二个表映射到Hibernate中的类/ entityName,Hibernate会为您处理这个问题。