JPA主要操作方法总结
源:http://blog.sina.com.cn/s/blog_6826662b0100znlr.html
评:JPA 一统天下
public void persist(Object entity)
persist 方法可以将实例转换为 managed( 托管 ) 状态。在调用 flush() 方法或提交事物后,实例将会被插入到数据库中。
?
public void merge(Object entity)
merge 方法的主要作用是将用户对一个 detached 状态实体的修改进行归档,归档后将产生一个新的 managed 状态对象。
?
public void refresh(Object entity)
refresh 方法可以保证当前的实例与数据库中的实例的内容一致。
?
public void remove(Object entity)
remove 方法可以将实体转换为 removed 状态,并且在调用 flush() 方法或提交事物后删除数据库中的数据。
?
JPA的merge和persist比较
merge()也有persist()的作用。persist会把传进去的实体放到持久化上下文中,此时如果持久化上下文中有了这个实体,就会抛出javax.persistence.EntityExistsException,没有的话事务提交的时候把那个对象加进数据库中,如果数据库中已经存在了那个对象(那一行),就会抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraint
ViolationException;而merge会在持久化上下文中生成传进去的实体的受管版本,如果已经有了受管版本,那也不会抛出异常,然后把那个受管的实体返回出来,事务提交的时候如果数据库中不存在那个对象(那一行),就把把那个受管的加进去,存在的话就替换掉原来的数据。merge是如果持久化上下文中有了受管版本,那就更新,没有就复制一份,返回受管的。