Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何深度复制实体(不包括其关系的id)?_Java_Spring_Hibernate_Orika - Fatal编程技术网

Java 如何深度复制实体(不包括其关系的id)?

Java 如何深度复制实体(不包括其关系的id)?,java,spring,hibernate,orika,Java,Spring,Hibernate,Orika,我将Spring与Spring数据JPA一起使用,在深度复制复杂实体时遇到了一个问题。实体A有10个一对多关系。为了简洁起见,这里只显示了一个。我想深度复制这个实体,而不包含嵌套对象B的id字段 我希望避免由于性能损失而使用反射。使用Orika,我设法排除了一个对象的id,但未能排除嵌套对象的id @Entity public class A { @Id @GeneratedValue private Long id; //... @OneToMany

我将Spring与Spring数据JPA一起使用,在深度复制复杂实体时遇到了一个问题。实体A有10个一对多关系。为了简洁起见,这里只显示了一个。我想深度复制这个实体,而不包含嵌套对象B的id字段

我希望避免由于性能损失而使用反射。使用Orika,我设法排除了一个对象的id,但未能排除嵌套对象的id

@Entity
public class A {

    @Id
    @GeneratedValue
    private Long id;
    //...

    @OneToMany()
    @JoinColumn(name = "a_id")
    private Set<B> items;

    // getters and setters
}

@Entity
public class B {

    @Id
    @GeneratedValue
    private Long id;
    //...

    public B() {}

    // getters and setters
}
如何实现我的目标?
注意-我没有锁定到Orika,欢迎使用任何其他解决方案。

我已通过for Orika mapper并覆盖其默认方法解决了此问题。 现在,当使用映射器复制容器类时,包含Id注释的每个字段都被排除在外—它会影响所有嵌套的单个和多个发生元素

要使映射器使用自定义类映射生成器,请执行以下操作:


“由于性能损失,我想避免使用反射”,您使用spring、hibernate。。。这是反射。使用spring util或apache,如果您不想直接使用反射,您可以这样做如果您真的关心反射的性能,那么您就不会使用spring、Hibernate或Orika,因为它们所做的一切都100%依赖反射。
A source = fetchFromDb();
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
        mapperFactory.classMap(A.class, A.class)
                .mapNulls(true)
                .exclude("id")
                .exclude("items['id']")
                .byDefault()
                .register();
        MapperFacade mapperFacade = mapperFactory.getMapperFacade();

        A dest = mapperFacade.map(source, A.class);
  MapperFactory mapperFactory = new DefaultMapperFactory
            .Builder()
            .classMapBuilderFactory(new IdExclusionClassMapBuilder.Factory())
            .build();