论坛首页 入门技术论坛

Hibernate3.1 ----saveorUpdate的再次疑问!

浏览 2724 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-03-21  
最近用Struts1.1+Hibernate3.1进行程序设计,遇到了如下问题

ID生成策略采用 generator class="assigned"

根据  这位仁兄的帖子:http://www.iteye.com/topic/27369《主题:   saveorUpdate与unsaved-value,save,update,delete总结 》

中所述:
————————————————————
2).主键由自己来赋值
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="assigned" />
</id>

Project project = new Project();
project.setId(XXX);
this.projectDao.saveOrUpdate(project);

1、默认unsaved-value="null"
这时有所不同,hibernate会根据主键产生一个select,来判断此对象是否已被持久化
已被持久化则update,未被持久化则save。

————————————————----

也就是说,采用ID手动赋值,使用saveOrUpdate的时候hibernate会根据主键产生一个select,来判断此对象是否已被持久化已被持久化则update,未被持久化则save。
    !但是我试了多次,不是这么回事啊,如果我给ID赋值,saveOrUpdate总是发出Update的语句,到底怎么回事??他说的时否正确,我目前程序就遇到这里,希望能够给解释一下
   发表时间:2007-03-22  
AI,估计他用到了时间戳或者版本信息,也不说明一下,各位又和我一样的请记住,像上面的情况,必须使用时间戳或者版本信息才可以,像这样:
    <id name="id" type="java.lang.String">
    <column name="id" length="32" />
    <generator class="assigned"></generator>
    </id>
    <timestamp name="timeStamp"  generated="always"
    column="timestamp" unsaved-value="null" source="vm" access="property">
    </timestamp>
0 请登录后投票
   发表时间:2007-03-22  
记住数据库中该字段设为非空!切忌,我的就是,在没设为非空的时候不起作用,并没有自动向该字段添值
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics