Hibernate怎样获取其用Oracle sequence自动生成的主键

Posted on 2009-03-11 13:49 Robert Su 阅读(5178) 评论(6)  编辑  收藏 所属分类: Java

Case:
action需要同时向两张表中添加数据
比如一个是class 一个是video
每次都是一对多的关系~每一次插入的Video的classID是相同的

video表中有个字段是classId 对应的是的class中的主键   ID

ID是sequence生成的
那我批量插入video的时候怎样获取class_ID_sequence生成的id值呢?

思路:
我观察到Hibernate做插入的时候每次插入记录的时候会首先查询sequence

select CLASS_ID_SEQ.nextval from dual
那怎样获取到这个select的值呢?

获取到这个值可以直接给
video.setClassID(classID)

请大家讨论并指教~

***************整理如下*******************
执行完这句sql语句select CLASS_ID_SEQ.nextval from dual之后,class这个对象已经执行过setId方法,所以当前它的id值可以获得getId方法得到;
可以直接在在action这样写
Long id=class.getId();


感谢隔叶黄莺

Feedback

# re: Hibernate怎样获取其用Oracle sequence自动生成的主键  回复  更多评论   

2009-03-11 13:56 by 隔叶黄莺
还要讨论什么呢?是这样的啊。
对象一持久化使给 OID 赋了值,如果使用映射击的关联关系,这些都是 Hibernate 自动帮你完成的。

# re: Hibernate怎样获取其用Oracle sequence自动生成的主键  回复  更多评论   

2009-03-11 14:13 by Robert Su
@隔叶黄莺

现在的问题是怎样获得这个seq生成的ID值

知道那是自动的啊~可是您没理解我提的问题

# re: Hibernate怎样获取其用Oracle sequence自动生成的主键  回复  更多评论   

2009-03-11 14:33 by 隔叶黄莺
对象持久化后,直接取那个持久对象的 OID 就是
比如
User user = new User();
.......
..........
session.save(user);

user.getId() 就是了。

save() 方法的返回值是一个序列化对象,那个也就是主键,即 user.getId() 值。

# re: Hibernate怎样获取其用Oracle sequence自动生成的主键  回复  更多评论   

2009-03-11 14:51 by Robert Su
@隔叶黄莺
好~谢谢您了

# re: Hibernate怎样获取其用Oracle sequence自动生成的主键  回复  更多评论   

2009-03-11 19:29 by Java_do
@隔叶黄莺

同解!save之后的对象是一个持久化对象,代表的是数据库中的一条记录,
那么自然含有ID了

# re: Hibernate怎样获取其用Oracle sequence自动生成的主键  回复  更多评论   

2009-03-11 21:58 by 隔叶黄莺
@Java_do
是要注意那个 save() 方法的返回值。

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 103, comments - 104, trackbacks - 0, articles - 5

Copyright © Robert Su