文章字数:420,阅读全文大约需要1分钟
save()方法传入了id,但是识别成了新增
新建了model并且调用save()导致识别成了新增
1 | Model model=new Model (); |
修改后
1 | Model model=modelDao.findById(id); |
hibernate持久层三种状态
瞬时状态 (Transient)
new了一个对象,但是没有被hibernate缓存管理,数据库中没有一条记录和其对应,不与session关联
持久状态 (Persistent)
- save() 和 saveOrUpdate()使对象转换成持久态
- find(),get()等方法查询的对象也是持久态
对象被持久化对象管理,对象的改变会同步带数据库(这就是原因)同步不会马上进行,在Transaction之后,也就是commit()后提交。未提交的叫脏数据
- 游离状态 (Detached)
- close() 或 clear(),evict() 之后,持久对象会变为脱管对象
- 就是脱离管理状态
脱管对象和瞬时状态差不多,只是数据库内可能存在一样的记录,但是并不关联。