創建使用現有實體的新的實體有例如我們如何在休眠
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進行字段映射,但是事件之後我們必須複製列表子對象中父對象的引用。你理解複雜的東西,它是一項非常繁瑣的任務。 –