2016-11-07 85 views
0

創建實體的副本,我有實體用戶:如何與Hibernate

@Entity 
@Table(name = "users") 
public class User{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @Column(name = "name", nullable = false) 
     private String name; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "parentid", cascade=CascadeType.ALL) 
    private List<Lesson> lessonList=new ArrayList<>(); 
} 

和實體課程

@Entity 
    @Table(name = "lesson") 
    public class Lesson{ 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private int id; 

     @Column(name = "name", nullable = false) 
      private String name; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "parentid") 
    private User parentid; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "parentid2", cascade=CascadeType.ALL) 
     private List<Exercise> exerciseList=new ArrayList<>(); 
    } 

我需要做的USER1課副本(深層副本),並添加此複製到另一個用戶2。最後,我需要用戶1有課,用戶2有課程副本。

+2

這已經回答/討論[這裏](http://stackoverflow.com/questions/11625096/cloning-jpa-entity)和[這裏]( http://stackoverflow.com/questions/1106632/deep-copy-in-jpa) –

回答

0

通過使用XStream api來完成它的最簡單的方法。用@XStreamOmitField註釋標註@Id字段,然後像下面那樣將對象寫入xml。

XStream xstream = new XStream(new StaxDriver()); 
String xml = xstream.toXML(yourObject); 

讀回

YourObject yourObject = (Person)xstream.fromXML(xml); 
+0

這很有趣 – Sergei