Hibernate持久化对象修改id重新保存的办法——Hibernate学习记录二

2017年11月10日 20:16:48 筱光 阅读数:1122
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/womeng2009/article/details/78502912

昨天在工作中遇到一个特殊的场景,点击修改,对一条发布状态的记录进行复制,并生成一个草稿版本,也就是同一条记录的不同状态,也就出现需要从数据库get之后把id置空重新保存,这里出现一个问题,但Hibernate的持久化对象是无法对id进行修改操作的,需要重新new一个全新的对象存储才可以,但Java中的机制,如果采用new Object()并赋值的的方式并不是真的产生一个新的对象,而是引用赋值,即传递内存地址,学过C语言的很容易理解。

要实现这种需求,就要复制出一个全新的对象,Java提供了一种解决办法——对象克隆。

对象克隆的方法:

实体类实现Cloneable接口,然后在实体类中重写clone()方法,以User类为例,如下所示:

  1. package com.domain;
  2.  
  3. /**
  4. * Created by Jiro.Chen on 2017/11/6.
  5. */
  6. public class User implements Cloneable {
  7. private String id;
  8. private String name;
  9. private Integer age;
  10. private String address;
  11.  
  12. public String getId() {
  13. return id;
  14. }
  15.  
  16. public void setId(String id) {
  17. this.id = id;
  18. }
  19.  
  20. public String getName() {
  21. return name;
  22. }
  23.  
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27.  
  28. public Integer getAge() {
  29. return age;
  30. }
  31.  
  32. public void setAge(Integer age) {
  33. this.age = age;
  34. }
  35.  
  36. public String getAddress() {
  37. return address;
  38. }
  39.  
  40. public void setAddress(String address) {
  41. this.address = address;
  42. }
  43.  
  44. public boolean equals(Object o) {
  45. if (this == o) return true;
  46. if (o == null || getClass() != o.getClass()) return false;
  47.  
  48. User user = (User) o;
  49.  
  50. if (id != null ? !id.equals(user.id) : user.id != null) return false;
  51. if (name != null ? !name.equals(user.name) : user.name != null) return false;
  52. if (age != null ? !age.equals(user.age) : user.age != null) return false;
  53. if (address != null ? !address.equals(user.address) : user.address != null) return false;
  54.  
  55. return true;
  56. }
  57.  
  58. public int hashCode() {
  59. int result = id != null ? id.hashCode() : 0;
  60. result = 31 * result + (name != null ? name.hashCode() : 0);
  61. result = 31 * result + (age != null ? age.hashCode() : 0);
  62. result = 31 * result + (address != null ? address.hashCode() : 0);
  63. return result;
  64. }
  65.  
  66. @Override
  67. public Object clone(){
  68. User user = null;
  69. try {
  70. user = (User)super.clone();
  71. }catch (CloneNotSupportedException e){
  72. e.printStackTrace();
  73. }
  74. return user;
  75. }
  76. }

这样使用的时候,User user1 =  new User();    User user2 = user1.clone();即可将user1的所有属性值复制给user2,但他们是两个对象,而不是同一个对象的引用。之后可以进行id的修改,然后用Hibernate进行保存,生成一条新的记录。

Hibernate持久化对象修改id重新保存的办法的更多相关文章

  1. hibernate 持久化对象的生命周期 2.1

    持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...

  2. hibernate 持久化对象的生命周期

    持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...

  3. hibernate 持久化对象 save

    hibernate 持久化对象 save new出来的user对象是游离状态的对象,执行session.save()方法保存后,user对象就变为持久化了,持久化的对象跟数据库表双向绑定的意思, 对象 ...

  4. 1.1Hibernate持久化类和Hibernate持久化对象状态

    一.持久化对象po类 1.po定义 PO,是Persistent Object的缩写,是持久化类.PO是由PO=POJO+hbm映射配置组成. 2.通俗理解 PO类即持久化类,其实就是一个普通的Jav ...

  5. Hibernate持久化对象状态

    在Hibernate中,持久化对象再被操作过程中分为三个时期.这三个时期和session周期相关. 各自是瞬时(Transient),持久太(persistent)和游离态(Detached) 瞬时状 ...

  6. Hibernate持久化对象的三种状态深入理解

    关于OID hibernate缓存是一个map,他会根据OID作为缓存对象的key,我们的映射文件中<id>标签指定的属性值会作为OID 持久化对象的三种状态 为了方便理解,Hiberna ...

  7. Hibernate持久化对象的状态

    1. 站在持久化的角度 , Hibernate 把对象分为 4 种状态 : 持久化状态, 暂时状态, 游离状态(脱管状态) , 删除状态.Session 的特定方法能使对象从一个状态转换到还有一个状态 ...

  8. Hibernate持久化对象

    持久化类应遵循的规则: 有无参构造器,构造器的修饰符>=默认访问控制符 有标识属性,映射数据库表的主键,建议使用基本类型的包装类 每个成员有setter和getter 非final修饰的类 重写 ...

  9. hibernate 持久化对象的三个状态

    Hibernate中的对象有3种状态 瞬时对象(TransientObjects).持久化对象(PersistentObjects)和离线对象(DetachedObjects也叫做脱管对象) Tran ...

随机推荐

  1. JAVA学习笔记--初识容器类库

    一.前言 JAVA中一切皆为对象,因而,持有对象显得尤为重要. 在JAVA中,我们可以通过创建一个对象的引用的方式来持有对象: HoldingObject holding; 也可以创建一个对象数组来持 ...

  2. CS231n assignment2

    preparation: solve the problem of `from builtins import rang` pip install future  update_rule

  3. PHP开发中常见的漏洞及防范

    PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...

  4. preg_replace 以及弃用的e

    preg_replace (PHP 4, PHP 5) preg_replace — 执行一个正则表达式的搜索和替换 说明¶ mixed preg_replace ( mixed $pattern , ...

  5. plsql 永久注册码

    注册码:Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769 password:xs374ca 可用

  6. Alpha冲刺——第六天

    Alpha第六天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  7. 第四周作业——C语言自评

    1.你对自己的未来有什么规划?做了哪些准备?以目前的现状来说,希望至少能够掌握专业所要求的基本操作,然后一步步去深入.提升,毕业之后不会灰溜溜的一次次求职失败.目前更多的是利用闲暇时间补回过去老师同学 ...

  8. Rsyslog-legacy(旧版本语法)配置说明及举例

    1. RULES-书写规则 格式:日志设备(类型).日志级别             日志处理方式 (1)日志类型分类 auth pam产生的日志 authpriv ssh,ftp等登录信息的验证信息 ...

  9. 奥特曼小分队之we are a team

    团队名称:奥特曼小分队 团队博客链接:http://cnblogs.com/ATMXFD 团队负责跑腿的:李全清 http://www.cnblogs.com/QuanQingli/ 团队成员: 孙乐 ...

  10. spring-test与junit

    1.添加依赖 spring-test junit spring-context(自动添加依赖其他所需的spring依赖包) 2.在class前添加以下注解,用于配置xml文件的位置 @RunWith( ...