2
我讀JPA 2.1規範,並有這樣的片段:JPA和Hibernate - 「堅持操作」
一個新的實體實例成爲管理的和持久的通過調用 在其上或通過persist方法級聯堅持操作。是 語義的持續運作,應用到實體X作爲 如下:...
是否可以調用persist操作不明確調用persist()方法或持續操作總是要觸發通過調用persist()?
比方說,我有兩個實體A和B,其中A具有OneToMany(cascade=PERSIST)
與B.
關係
tx.begin();
A a = new A();
B b = new B();
a.getBCollection().add(b);
entityManager.persist(a);
tx.commit();
一樣:
tx.begin();
A a = new A();
entityManager.persist(a);
B b = new B();
a.getBCollection().add(b);
tx.commit();
在第二個例子即使實體是在調用persist()方法後添加的,B實體是否會被持久化(持續操作將被級聯)?或者我必須在調用persist()方法之前將B實體添加到集合中,就像在第一個示例中那樣,只有這樣持久化操作纔會級聯?
又是怎麼回事兩個交易#3例子:
tx1.begin();
A a = new A();
entityManager.persist(a); //persist with key 1L
tx1.commit();
tx2.begin()
B b = new B();
A a = entityManager.find(A.class, 1L);
a.getBCollection().add(b);
tx2.commit();
沒有堅持在第二次交易()方法的調用,但A處於受控狀態,所以會在B實體被持久化?
所以CascadeType.PERSIST不直接連接到persist()方法,MERGE merge()等?我總是這麼想 – swch