我有两张桌子。一个表有序列和其他表没有。为了商业目的,我需要使用插入第二个表的相同ID。
目前我正在使用投影获得最大值并将其递增。在两个表中使用此值进行插入。
我需要使用一个表的序列值并在另一个表中插入相同的值吗?怎么做到这一点?
答案 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会为您处理这个问题。