当前页面: 开发资料首页 → J2EE 专题 → 【求助】[hibernate]每运行一次程序,为何用session.save()会把表中的行替换而不是增加?
【求助】[hibernate]每运行一次程序,为何用session.save()会把表中的行替换而不是增加?
摘要: 【求助】[hibernate]每运行一次程序,为何用session.save()会把表中的行替换而不是增加?
发现每运行一次程序,程序中的session.save代码都会把原数据库表中的行清空,再插入;而不是生成identity,插入到最后。请问有啥解决办法?
console中的显示信息:
Hibernate: insert into Star (name, xxxx) values (?, xx)
select @@identity
程序代码:
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Star star = new Star();
star.setName("aa");
star.set...("aa");
session.save(star);
session.getTransaction().commit();
环境:hibernate3.1,sybase 12.5
maping:
请出示你的OID生成策略
一般出现此种情况是由于你的每一个Hibernate持久对象的OID一致。
因此可能是楼主将具有相同OID的对象重复注入不同属性导致的。。
不好意思,偶hibernate刚入门。请问楼上ODI是啥意思?
另外偶试过这样的测试流程:第一次运行程序new两个对象,然后save,数据库中就有了两行。第二次允许程序new一个对象,save,发现数据库中只有第二次运行的这一行了!
对象标识符生成策略难道不就是
这个嘛?
你的mapping有问题,看看我写的,如下:
......
1、没有对应表名
2、没有对应列名
3、没有对应的类型
GlandJacky兄,省略的属性不是会自动用默认值的嘛???
比如,表示column也是"name"啊
偶改成,发现虽然hibernate的sql输出虽然有变化,但是结果确没有变化,问题依然存在。(改成identity也一样)
偶的测试流程是这样的,第一次运行程序时,new几个star对象,然后save,数据库显示正常。第二次运行时new一个star对象,然后save,这是发现数据库中第一次运行save的那几行数据都不见了,只剩下第二次运行程序时save的那个st ar!!!
改成increment后的输出:
Hibernate: select max(id) from Star
Hibernate: insert into Star (name, ...., id) values (?, ...,?)
原来是因为这句!!!create
一般来说, Hibernate会更新这个表. 但如果是子表的请, 那Hibernate只能做删除后在插入.
上个项目就是这样做得, Hibernate现在还有些功能不是很好.
来晚了~~过来接点分