Hibernate持久化物件修改id重新儲存的辦法
阿新 • • 發佈:2019-01-05
Hibernate持久化物件修改id重新儲存的辦法——Hibernate學習記錄二
2017年11月10日 20:16:48 筱光 閱讀數:1122昨天在工作中遇到一個特殊的場景,點選修改,對一條釋出狀態的記錄進行復制,並生成一個草稿版本,也就是同一條記錄的不同狀態,也就出現需要從資料庫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;
- }
- 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進行儲存,生成一條新的記錄。