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
原创粉丝点击