【求助】[hibernate]每运行一次程序,为何用session.save()会把表中的行替换而不是增加?

snowolf128 2006-06-22 10:18:29
发现每运行一次程序,程序中的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:
<class name="Star">
<id name="id">
<generator class="native"/>
</id>
<property name="name" length="10" not-null="true"/>
<property name="age" length="4" not-null="false"/>
<property name="resume" length="1000" not-null="true"/>
<property name="sign" length="500" not-null="false"/>
<property name="phone" length="13" not-null="true"/>
<property name="imagePath" length="100" not-null="true"/>
</class>
...全文
333 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
smlovetp 2006-06-25
  • 打赏
  • 举报
回复
来晚了~~过来接点分
yicnn 2006-06-24
  • 打赏
  • 举报
回复
一般来说, Hibernate会更新这个表. 但如果是子表的请, 那Hibernate只能做删除后在插入.

上个项目就是这样做得, Hibernate现在还有些功能不是很好.
snowolf128 2006-06-24
  • 打赏
  • 举报
回复
原来是因为这句!!!<property name="hbm2ddl.auto">create</property>
snowolf128 2006-06-23
  • 打赏
  • 举报
回复
对象标识符生成策略难道不就是<generator class="native"/>这个嘛?
snowolf128 2006-06-23
  • 打赏
  • 举报
回复
不好意思,偶hibernate刚入门。请问楼上ODI是啥意思?

另外偶试过这样的测试流程:第一次运行程序new两个对象,然后save,数据库中就有了两行。第二次允许程序new一个对象,save,发现数据库中只有第二次运行的这一行了!
snowolf128 2006-06-23
  • 打赏
  • 举报
回复

偶改成<generator class="increment"/>,发现虽然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 (?, ...,?)
snowolf128 2006-06-23
  • 打赏
  • 举报
回复
GlandJacky兄,省略的属性不是会自动用默认值的嘛???
比如<property name="name">,表示column也是"name"啊
GlandJacky 2006-06-23
  • 打赏
  • 举报
回复
你的mapping有问题,看看我写的,如下:
<class name="Star" table="Star">
<id column="iuser_id" type="integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="string" length="10" not-null="true"/>
......
</class>
1、没有对应表名
2、没有对应列名
3、没有对应的类型
rainstar145 2006-06-23
  • 打赏
  • 举报
回复
请出示你的OID生成策略
一般出现此种情况是由于你的每一个Hibernate持久对象的OID一致。
因此可能是楼主将具有相同OID的对象重复注入不同属性导致的。。

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧