Hibernate实体的深层克隆

ver*_*rdy 12 java persistence database-design hibernate clone

我想知道如何创建具有所有关联的持久对象的深层副本.假设我有以下型号.

class Document {
    String title;
    String content;
    Person owner;
    Set<Citation> citations;
}

class Person {
    String name;
    Set<Document> documents;
}

class Citation {
    String title;
    Date date;
    Set<Document> documents;
}
Run Code Online (Sandbox Code Playgroud)

我有一个场景,用户可能想要从一个人那里获取特定文档的副本并将文档作为他/她的文档然后他/她可以更改其内容和名称.在这种情况下,我可以想到一种方法来实现那种创建该文档的深层副本(具有其关联)的场景.

或者,如果有人知道任何其他可能的方法来做这样的事情而不做大量数据,因为我知道它可能对应用程序性能有害.

我也在考虑创建一个原始文档的引用,比如有一个属性,originalDocument但这样我就无法知道哪个属性(或者可能是关联)已被更改.

Jay*_*ram 7

要执行深层复制:

public static <T> T clone(Class<T> clazz, T dtls) { 
        T clonedObject = (T) SerializationHelper.clone((Serializable) dtls); 
        return clonedObject; 
  }
Run Code Online (Sandbox Code Playgroud)

此实用程序方法将提供实体的深层副本,您可以执行希望对克隆对象执行的操作.

  • 这个问题可能是,它无法处理延迟加载集合和版本属性.恕我直言,更好的方法是在每个班级自己编写深层复制方法. (2认同)