我的数据库操作使用的是hibernate。
在save 的时候是将主键设置为0,
然后在数据库中插入时,利用触发器调用存储过程获得主键。
目前数据库插入是没问题的,
但是,利用
Long id = (Long)this.getHibernateTemplate().save(entity);
是得不到主键的。
因为hibernateSession中保存的是持久态的对象,而在save时,数据库通过触发器调用存储过程修改了对象的值,这时对象其实应该是脱离态了,而hibernateSession并不知道,他保存的还是持久态对象的数据。
此时,需要通过hibernate得到数据库中的数据,hibernate会自动的检查hibernateSession中的对象是否更新,并保存为持久态,这时得到的数据才是数据库中改变了主键的数据。
方法:
this.getHibernateTemplate().save(entity);
Long id = (Long)this.getHibernateTemplate().find("select id from entity ");
(或者:entity = this.getHibernateTemplate().findByExample(entity).get(0);)
感谢所有回复我帖子的人~
还有,刚又仔细看了遍帖子,才发现longlonglong25已经告诉了我解决方法,但由于当时比较着急,没有仔细看你的回复,导致最后结贴时给你的分数不多。。。真是抱歉。。