0%

hibernate持久层

文章字数:420,阅读全文大约需要1分钟

save()方法传入了id,但是识别成了新增

新建了model并且调用save()导致识别成了新增

1
2
3
Model model=new Model ();
copyItem2Model(Item,model);//转换
modelDao.save(visWatchList);

修改后

1
2
3
Model model=modelDao.findById(id);
copyItem2Model(Item,model);//转换
modelDao.save(visWatchList);

hibernate持久层三种状态

  • 瞬时状态 (Transient)

    new了一个对象,但是没有被hibernate缓存管理,数据库中没有一条记录和其对应,不与session关联

  • 持久状态 (Persistent)

  1. save() 和 saveOrUpdate()使对象转换成持久态
  2. find(),get()等方法查询的对象也是持久态

    对象被持久化对象管理,对象的改变会同步带数据库(这就是原因)同步不会马上进行,在Transaction之后,也就是commit()后提交。未提交的叫脏数据

  • 游离状态 (Detached)
  1. close() 或 clear(),evict() 之后,持久对象会变为脱管对象
  2. 就是脱离管理状态

    脱管对象和瞬时状态差不多,只是数据库内可能存在一样的记录,但是并不关联。