1.临时状态
临时状态也称为瞬时状态,该对象既没有在session中也没有在数据库中,刚new出来的对象或者session执行了delete方法之后的对象都处于临时(瞬时)状态.
2.持久化状态
该对像存储于session中,在数据库中也有该对象的的数据,那么我们就说该对象处于持久化状态;临时状态下的对象执行了save()方法也会处于持久化状态,还有游离状态下的对象执行upDate , get或load方法之后得到的对象都处于持久化状态.
3.游离状态
该对象在数据库中有表示符(该对象的id在数据库表中存在)在session中没有该对象.一般session执行了close , clear , evict等方法,处于持久化状态的对象就成了游离状态.刚实例化(new)出来的对象,如果在数据库中有它的主键,那么该对象是游离化状态.
saveOrUpdate该如何使用?
saveOrUpdate的使用时根据对象的状态判断的,一般如果对象处于临时(瞬时)状态,那么就执行save方法,如果对象是游离状态就执行update方法.
- save是返回插入数据的主见的,而saveOrUpdate是void
- save方法更适用与确定了是要插入,而且需要得到插入数据的主键而saveOrUpdate更倾向于不缺定是插入还是更新,而且你不需要得到他的主键
- 另一方面,如果你无法确定你要插入或更新的对象是不是持久态或游离态时。如果你save一个持久态或更新一个游离态,这都是有问题的,此时你就要用到saveOrUpdate
- 总体来说,如果你能确定你即将操作对象的状态,则不需要用saveOrUpdate