hibernate save和update以及saveOrUpdate区别
来源:互联网 发布:维旺迪收购育碧 知乎 编辑:程序博客网 时间:2024/05/21 11:26
save()方法很显然是执行保存操作的,如果是对一个新的刚new出来的对象进行保存,自然要使用这个方法了,数据库中没有这个对象。
update()如果是对一个已经存在的托管对象进行更新那么肯定是要使用update()方法了,数据中有这个对象。
saveOrUpdate()这个方法是更新或者插入,有主键就执行更新,如果没有主键就执行插入。
上面的解释是没有问题的,但是当我实际用的时候,老以为有saveOrUpdate不就行了。可以忽略掉save和update方法了,、、、
还是太天真了。。。。
似的,不遇到问题,永远不会想为什么还是会有save update
经验还是如此重要
package com.xky.activemq.pojo;import java.io.Serializable;import java.util.List;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;/** * 消息实体类 字段只增加不删减 <br> * ReceivedXmlMessage * @author genge 2015年11月18日 下午4:16:00 */@Entity@Table(name="Base_Message")public class BaseMessage implements Serializable{private static final long serialVersionUID = 1L;/*******************通用消息字段*********************//** * 唯一标识 */private String Id;/** * 消息来源 */private String FromType="";/** * 消息创建的时间 */private String CreateTime=""; /** * 消息类型:app 、web、sms、wechat、group<br> * 其中格式为如上单一类别,特别注意为group时,将选择群发,各个平台都将收到消息<br> */private String MsgType=""; /** * 数据类型:string map object(Serializable),不设置默认为string */private String DataType="string"; /** * 消息内容(序列化json串,代表真实消息) */private String Content = ""; /** * 消息拦截器:通过这个属性的设置可以帮助接收者过滤消息 */private String MsgSelector = ""; /** * Cron表达式 定时发送 优先级最高 */private String Cron = ""; /** * 重复投递的时间间隔 */private long Period = 0; /** * 重复投递次数 */private int Repeat = 0; /** * 发送消息延迟时间 */private long Delay = 0; //延迟投递的时间@Id@GeneratedValue(generator = "system-uuid")@GenericGenerator(name = "system-uuid", strategy = "assigned")@Column(length = 100, name = "id") public String getId() {return Id;}public void setId(String id) {Id = id;}/** * 消息类型 * @return String 消息类型 * @author genge 2015年11月18日 下午3:39:23 */@Column(name="MsgType",length=50)public String getMsgType() {return MsgType;}/** * 消息类型 * @param msgType 消息类型 * @author genge 2015年11月18日 下午3:39:59 */public void setMsgType(String msgType) {MsgType = msgType;}/** * 消息创建的时间 * @return * @author genge 2015年11月18日 下午3:43:38 */@Column(name="CreateTime",length=40)public String getCreateTime() {return CreateTime;}/** * 消息创建的时间 * @param createTime * @author genge 2015年11月18日 下午3:43:53 */public void setCreateTime(String createTime) {CreateTime = createTime;}/** * 数据类型 * @return * @author genge 2015年11月18日 下午3:44:02 */@Column(name="DataType",length=10)public String getDataType() {return DataType;}/** * 数据类型 * @param dataType * @author genge 2015年11月18日 下午3:44:09 */public void setDataType(String dataType) {DataType = dataType;}@Column(name = "Content",columnDefinition="CLOB")public String getContent() {return Content;}public void setContent(String content) {Content = content;}@Column(name = "MsgSelector",length=50)public String getMsgSelector() {return MsgSelector;}public void setMsgSelector(String msgSelector) {MsgSelector = msgSelector;}@Column(name = "Cron",length=30)public String getCron() {return Cron;}public void setCron(String cron) {Cron = cron;}@Column(name = "FromType",length=30)public String getFromType() {return FromType;}public void setFromType(String fromType) {FromType = fromType;}@Column(name = "Period")public long getPeriod() {return Period;}public void setPeriod(long period) {Period = period;}@Column(name = "Repeat")public int getRepeat() {return Repeat;}public void setRepeat(int repeat) {Repeat = repeat;}@Column(name = "Delay")public long getDelay() {return Delay;}public void setDelay(long delay) {Delay = delay;}}
pojo类如上,似乎没有什么特别的,但是细心的同学会发现,BaseMessage主键的分配策略是assigned
也就是保存一个对象的时候,主键由我来分配,这下。。。
BaseMessage baseMessage = new BaseMessage();
就是一个完整的对象了,主键也有 但是我们的需求是保存到数据库中 按照之前的思维,用saveOrupdate。。然后,看数据库中根本就没有数据,没有存进去。。。。。我去。。再回来看上面三条解释。瞬间懂了。。。
saveOrUpdate 是有主键(在对象中中查找)就会执行update ,然后 update XX where id=xx ,然后update受影响的行没有。。。。因为where id=xx找不到的数据在数据库中,,,而我们想要的结果就是insert (save)。。。此时懂了,当你的对象id是自己分配的,就不要用saveOrUpdate保存了。。。。这下就知道save还是有存在的必要 了。。。。
0 0
- hibernate save和update以及saveOrUpdate区别
- hibernate save和update以及saveOrUpdate区别
- hibernate save和update以及saveOrUpdate区别
- hibernate save和update以及saveOrUpdate区别
- hibernate save和update以及saveOrUpdate区别
- hibernate的save,update,saveorupdate以及merge区别
- Hibernate三种状态以及save、update和saveOrUpdate
- 浅谈hibernate save ,update 和 saveOrUpdate的区别
- hibernate中save,update,saveOrUpdate的用法和区别
- Hibernate save, saveOrUpdate, persist, merge, update 区别
- 浅谈hibernate save和saveOrUpdate区别
- 浅谈hibernate save和saveOrUpdate区别
- 浅谈hibernate save和saveOrUpdate区别
- 浅谈hibernate save和saveOrUpdate区别
- hibernate中更新数据库的各种方法以及save和update,saveOrUpdate的各自不同
- hibernate之saveorupdate()、save()、update()都有什么区别
- hibernate save,update,saveorupdate方法有什么区别
- hibernate之saveorupdate()、save()、update()都有什么区别
- Java中数组声明和初始化
- 如何设置 zend studio 默认编码为UTF8
- YUV与RGB格式转换
- 程序员不可不知的英文词汇(6)
- jQuery实现图片轮播效果(仿QQ商城首页、天猫首页)
- hibernate save和update以及saveOrUpdate区别
- Linux crontab定时执行任务
- Html+Css+base标签是什么及其作用介绍
- 用户画像数据建模方法
- viewpagerindicator+UnderlinePageIndicator+ viewpage切换
- Android TextView跑马灯效果
- SSH:EL表达式讲解
- yuv转rgb
- Android NDK中使用socket