Hibernate持久化对象修改id重新保存的办法——Hibernate学习记录二
来源:互联网 发布:大数据的特点 编辑:程序博客网 时间:2024/05/21 11:15
昨天在工作中遇到一个特殊的场景,点击修改,对一条发布状态的记录进行复制,并生成一个草稿版本,也就是同一条记录的不同状态,也就出现需要从数据库get之后把id置空重新保存,这里出现一个问题,但Hibernate的持久化对象是无法对id进行修改操作的,需要重新new一个全新的对象存储才可以,但Java中的机制,如果采用new Object()并赋值的的方式并不是真的产生一个新的对象,而是引用赋值,即传递内存地址,学过C语言的很容易理解。
要实现这种需求,就要复制出一个全新的对象,Java提供了一种解决办法——对象克隆。
对象克隆的方法:
实体类实现Cloneable接口,然后在实体类中重写clone()方法,以User类为例,如下所示:
package com.domain;/** * Created by Jiro.Chen on 2017/11/6. */public class User implements Cloneable { private String id; private String name; private Integer age; private String address; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (id != null ? !id.equals(user.id) : user.id != null) return false; if (name != null ? !name.equals(user.name) : user.name != null) return false; if (age != null ? !age.equals(user.age) : user.age != null) return false; if (address != null ? !address.equals(user.address) : user.address != null) return false; return true; } public int hashCode() { int result = id != null ? id.hashCode() : 0; result = 31 * result + (name != null ? name.hashCode() : 0); result = 31 * result + (age != null ? age.hashCode() : 0); result = 31 * result + (address != null ? address.hashCode() : 0); return result; } @Override public Object clone(){ User user = null; try { user = (User)super.clone(); }catch (CloneNotSupportedException e){ e.printStackTrace(); } return user; }}这样使用的时候,User user1 = new User(); User user2 = user1.clone();即可将user1的所有属性值复制给user2,但他们是两个对象,而不是同一个对象的引用。之后可以进行id的修改,然后用Hibernate进行保存,生成一条新的记录。
阅读全文
0 0
- Hibernate持久化对象修改id重新保存的办法——Hibernate学习记录二
- Hibernate持久化对象的学习
- Hibernate框架学习之二:深入理解持久化对象
- Hibernate的持久化对象
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
- Hibernate总结——持久化对象
- 【Hibernate】——对象持久化状态
- Hibernate——持久化对象状态
- Java对象持久化技术Hibernate 二
- Java对象持久化技术Hibernate 二
- 二:hibernate的持久化类和对象标识符
- 【Hibernate】——持久化对象的三种状态
- 【java】——Hibernate持久化对象的三个状态
- 【Hibernate】——持久化对象的三种状态
- 【03】框架学习—Hibernate持久化类/持久化对象的状态/事务与并发/查询方式
- 【Hibernate学习】——持久化对象的三种状态
- Hibernate持久化对象
- hibernate 持久化对象
- 使用std::copy将std::map输出到std::cout
- learn opencv-使用OpenCV(C ++ / Python)读取,写入和显示视频
- 5.5
- Tensorflow将模型导出为一个文件及接口设置
- SAS学习笔记(二)
- Hibernate持久化对象修改id重新保存的办法——Hibernate学习记录二
- 计算一个数的各位之和
- Educational Codeforces Round 32
- 最大递增子序列
- django 样式表不生效 也没有报错 但就是请求不到css文件
- Codeforces Round #444 (Div. 2)-ABC
- HTTP协议是无状态的如何理解 Connection: Keep-Alive
- 字符串操作
- 虚拟机不能访问外网