浏览 2724 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-21
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的语句,到底怎么回事??他说的时否正确,我目前程序就遇到这里,希望能够给解释一下 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |
发表时间:2007-03-22
记住数据库中该字段设为非空!切忌,我的就是,在没设为非空的时候不起作用,并没有自动向该字段添值
|
|
返回顶楼 | |