我们有一个非常嵌套的对象,例如
Class A {
Set<B>
Set<C>
Set<D>
}
Class B{
Set<P>
}
Class P {
Set<X>
}
现在我的要求是创建重复的对象。
由于我们不想触及现有实体,因此我们需要创建完整的对象。
除了手动迭代每个对象并使Ids为空之外,hibernate是否提供了创建完整对象的方法?
感谢。
答案 0 :(得分:0)
不确定我是否遇到了问题。为什么不在Java中创建一个新实例并像这样持久化(假设您已经创建或注入了一个实体管理器):
@Inject EntityManager entityManager;
....
A a = new A();
a.setFieldx(y); // etc for all fields you want to set
....
entityManager.persist(a);
答案 1 :(得分:0)
回答一个老问题,因为它可能对那些仍然需要这样的人有所帮助。我们也有类似的要求,杰克逊来救援。以下是一个简单的例子:
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);
}
}
需要考虑的一件事是,如果实体是双向的,那么它可能导致JSON编组/解组中的stackoverflow异常。因此,在实体上使用适当的注释来解决这个问题。