hibernate中save,persist和saveorupdate这三个方法的不同之处
答案:2 悬赏:50 手机版
解决时间 2021-04-22 22:36
- 提问者网友:半生酒醒
- 2021-04-22 17:11
hibernate中save,persist和saveorupdate这三个方法的不同之处
最佳答案
- 五星知识达人网友:骨子里都是戏
- 2021-04-22 18:37
所有这三个方法,也就是save()、saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法,但其中有些细微的差别。例如,save()只能INSERT记录,但是saveOrUpdate()可以进行记录的INSERT和UPDATE。还有,save()的返回值是一个Serializable对象,而persist()方法返回值为void。
save与saveOrUpdate的区别
save通过INSERT语句将对象保存到数据库,产生一个新的ID,将数据插入到数据库,并返回一个Serializable对象。
saveOrUpdate能根据对象是否已存在,而执行插入或更新。
显然saveOrUpdate更加灵活,但它需要额外判断对象是否已存在。
save与persist的区别
返回类型不同:save返回Serializable对象,而persist返回void
ID赋值时机不同:二者同样用于将transient实例持久化,但persist不保证ID值立即赋给持久化实例,可能会在flush的时候给ID赋值。
transaction外的行为不同:如果在transaction之外调用,persist保证会立即执行INSERT语句;而save则不保证(save返回一个identifier,如果必须执行INSERT来获取该identifier,则就会立即执行INSERT,而不论是在transaction之内或之外)
使用场景:由于上述第三点区别,persist方法适用于被扩展的Session上下文的长期运行的会话中(useful in long-running conversations with an extended Session context);而save则不适用。
save与saveOrUpdate的区别
save通过INSERT语句将对象保存到数据库,产生一个新的ID,将数据插入到数据库,并返回一个Serializable对象。
saveOrUpdate能根据对象是否已存在,而执行插入或更新。
显然saveOrUpdate更加灵活,但它需要额外判断对象是否已存在。
save与persist的区别
返回类型不同:save返回Serializable对象,而persist返回void
ID赋值时机不同:二者同样用于将transient实例持久化,但persist不保证ID值立即赋给持久化实例,可能会在flush的时候给ID赋值。
transaction外的行为不同:如果在transaction之外调用,persist保证会立即执行INSERT语句;而save则不保证(save返回一个identifier,如果必须执行INSERT来获取该identifier,则就会立即执行INSERT,而不论是在transaction之内或之外)
使用场景:由于上述第三点区别,persist方法适用于被扩展的Session上下文的长期运行的会话中(useful in long-running conversations with an extended Session context);而save则不适用。
全部回答
- 1楼网友:从此江山别
- 2021-04-22 19:37
save()和 persist()方法区别:
使用 save()
方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);
使用 persist()
方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对象的标识属性,所以程序执行 save()
会立即将持久化对象对应的数据插入数据库;而 persist() 则保证当它在一个事物外部被调用时,并不立即转换成 insert 语句,
这个功能是很有用的,尤其当我们封装一个长会话流程的时候,persist() 方法就显得尤为重要了。
save与persist的区别
1,返回类型不同:save返回serializable对象,而persist返回void
hibernate的原方法:
public serializable save(object object);
public void persist(object object);
2,id赋值时机不同:二者同样用于将transient实例持久化,但persist不保证id值立即赋给持久化实例,可能会在flush的时候给id赋值。
3,transaction外的行为不同:如果在transaction之外调用,persist保证会立即执行insert语句;而save则不保证(save返回一个identifier,如果必须执行insert来获取该identifier,则就会立即执行insert,而不论是在transaction之内或之外)
使用场景:由于上述第三点区别,persist方法适用于被扩展的session上下文的长期运行的会话中(useful in long-running conversations with an extended session context);而save则不适用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯