• Hibernate持久化对象修改id重新保存的办法


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

    版权声明:本文为博主原创文章,未经博主允许不得转载。 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进行保存,生成一条新的记录。

  • 相关阅读:
    java中的IO整理
    指针 study~O(∩_∩)O~
    const形参与非const形参
    最大公约数递归求解
    值传递、地址传递、引用传递(参考网上各种资料总结哦~)
    windows8开发笔记(4)消息弹出动画
    Azure绑定域名以及利用FTP上传文件
    windows8安装第三方Modern UI(Metro)应用方法
    windows8开发笔记(2)通知
    windows8开发笔记(5)说说Json的序列化和反序列化
  • 原文地址:https://www.cnblogs.com/libin6505/p/10224595.html
Copyright © 2020-2023  润新知