2016-11-07 28 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