创建使用现有实体的新的实体有例如我们如何在休眠
Class A {
Set<B>
Set<C>
Set<D>
}
Class B{
Set<P>
}
Class P {
Set<X>
}
非常嵌套的对象现在,我的要求是创建重复的对象。
由于我们不想触摸现有的实体,所以我们需要创建完整的对象。
是否hibernate提供了任何方式来创建完整的对象,而不是手动迭代每个对象并使ID为空?
谢谢。
创建使用现有实体的新的实体有例如我们如何在休眠
Class A {
Set<B>
Set<C>
Set<D>
}
Class B{
Set<P>
}
Class P {
Set<X>
}
非常嵌套的对象现在,我的要求是创建重复的对象。
由于我们不想触摸现有的实体,所以我们需要创建完整的对象。
是否hibernate提供了任何方式来创建完整的对象,而不是手动迭代每个对象并使ID为空?
谢谢。
不知道我得到你的问题。为什么不能在Java中创建一个新的实例,并坚持像这样(假设你已经创建或注入一个EntityManager):
@Inject EntityManager entityManager;
....
A a = new A();
a.setFieldx(y); // etc for all fields you want to set
....
entityManager.persist(a);
回答一个老问题,因为它可能是人谁仍然需要这样的事情有帮助。我们也有类似的要求,杰克逊来救援。下面是一个简单的例子:
需要考虑的是,如果实体是双向的,那么它可以导致JSON编组/解组计算器例外public class Test {
static class A {
String id;
String text;
B objectB;
//Getters & Setters
}
static class B {
String id;
String text;
//Getters & Setters
}
@JsonFilter("idFilter")
class PropertyFilterMixIn {
}
public static void main(String args[]) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(
Object.class, PropertyFilterMixIn.class);
String[] ignorableFieldNames = { "id" };
FilterProvider filters = new SimpleFilterProvider()
.addFilter("idFilter",
SimpleBeanPropertyFilter.serializeAllExcept(
ignorableFieldNames));
ObjectWriter writer = mapper.writer(filters);
final A a = new A();
a.setId("10");
a.setText("A-Obj");
B b = new B();
b.setText("B-Obj");
b.setId("12");
a.setObjectB(b);
final String string = writer.writeValueAsString(a);
final A readValue = mapper.readValue(string, A.class);
System.out.println(readValue);
}
}
一件事。因此,在实体上使用适当的注释来解决这个问题。
如果我设置实体ID为null并坚持它会做,但我不想那样,因为它是非常非常复杂的对象。我想要一个更好的选择,但谢谢你给你的时间。 –
我不会像你这样操纵实体ID。您应该创建对象的新实例,然后如果您必须复制大量字段,则可以使用Apache BeanUtils - > copyProperties。 –
我正在使用dozer mapper进行字段映射,但是事件之后我们必须复制列表子对象中父对象的引用。你理解复杂的东西,它是一项非常繁琐的任务。 –