javahibernatejpadeep-copyidentifier

How to deep copy a Hibernate entity while using a newly generated entity identifier


I'm using a relational DB using a single column pk with a few nested tables.

I need to add a simple archiving to my project. The archiving only happens when the application reaches a particular state, so what I was hoping to do was copy my existing hibernate object into a new instance where the new instance would be saved with a new ID while leaving the existing object intact.

I can't seem to figure out how to copy the existing object into a new instance without manually having to set every single new instance field.

Does anybody know of a simple way of doing this?


Solution

  • I am also working with Hibernate and I got the same requirement you got. What I followed was to implement Cloneable. Below is a code example of how to do it.

    class Person implements Cloneable {
    
            private String firstName;
            private String lastName;
    
            public Object clone() {
    
                Person obj = new Person();
                obj.setFirstName(this.firstName);
                obj.setLastName(this.lastName);
    
                return obj;
            }
    
            public String getFirstName() {
                return firstName;
            }
    
            public void setFirstName(String firstName) {
                this.firstName = firstName;
            }
    
            public String getLastName() {
                return lastName;
            }
    
            public void setLastName(String lastName) {
                this.lastName = lastName;
            }
        }
    

    Or you could go to a reflection based solution but I won't recommend that. Check this website for more details.