hibernate saveOrUpdate 与JPA的merge,等其他api方法

hibernate的saveOrUpdate,返回void,而merge是返回一个对象。

saveOrUpdate,会根据id判断是否持久化过,来Save或者update。之后对象就成为持久化状态。

而merge只是将对象保存到数据库,并没有成为持久化状态。


jpa的persist ,必须配合@version 版本来使用。如果没有而直接persist,那么会报detached entity pass to persist。这个异常一般是id生成策略的问题。

这个是在没有指定 主键生成策略情况下(assigned)。

所以我会换成merge



JPA规范了entityManager接口,来操作数据库。

persist:把一个实体加入持久化上下文中,在事务提交或flush保存到数据库。如果实体已经存在抛出entityExistsException

merge:把一个对象加入到时持久化上下文中,并返回这个对象。当事务提交的时候,如果对象发生了变化,则更改到数据库。==等于hibernate  saveOrUpdate

find: 根据主键从数据库查一个实体,先从缓存找,找不到就去数据库,并加入到缓存。

remove:从数据库删除一个对象,这个对象必须是受管状态


你可能感兴趣的:(工作中后台遇到的问题)