言简意赅:
new 一个实体类 比如叫 a 然后session.save(a)
然后a就有了一个id(id是Long, generator是native)
我的问题是Hibernate是怎么得到这个id的
在oracle中 可以 select hibernate_sequence.nextval from dual 得到
那么像mysql这种auto_increment的id, Hibernate又是怎么得到这个id的呢?
其实我想知道: 如果我用jdbc保存一条记录 我怎么知道我保存的这条记录的id呢
找hibernate源代码看过了 但是没看明白
请不吝赐教
问题补充
这种做法貌似有戏 谢谢
hibernate 封装jdbc。先看看jdbc怎么获取id的吧。
我想应该是这样的。
PreparedStatement pst=conn.prepareStatement("sql", Statement.RETURN_GENERATED_KEYS);
ResultSet rs=pst.getGeneratedKeys();
if(rs.next()){
int autoId=rs.getInt(1);
}
hibernate是根据不用的主键生成策略来生成主键的
不太明白楼主到底想问什么
我就不明白了,你不是在hbm文件里设置了id是Long, generator是native了吗?
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence
其中一种作为主键生成方式,
native,就是使用数据库自己的主键自增长方式,获取主键,hibernate的save方法,在native配置情况下,返回该操作赋予该记录的主键值。