站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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现在还有些功能不是很好.


来晚了~~过来接点分


↑返回目录
前一篇: j2ee新手入门,请各位指点一二,谢谢了!
后一篇: Vector迭代怎么写了谢谢