2012-07-09 52 views
1
  • 之間JPA實體共享是它根據JPA 2.0規範允許共享兩個不同的實體管理之間,例如一個實體以下列方式:不同實體管理

    A entityA = em1.find(entityA.class,1L); 
    B entityB = new entityB(); 
    b.setA(entityA); //entityB refers to entityA via @ManyToOne reference, cascade=CascadeType.PERSIST is enabled 
    em2.persist(entityB); 
    em2.flush(); 
    
  • 其答案是否變化,如果該線em1.detach(entityA);將第一和第二線之間插入? (或者換句話說:是共享分離的實體不同的實體管理器中允許的)

回答

0
  • 不,它是不允許有一個單一的實體由多個EntityManager小號
  • 管理是,如果你有一個分離的實體,則允許它通過另一個EntityManager管理管理,例如,使用merge()

但是,在你的情況下,EntityManager應該拋出一個異常,因爲不允許將persist()(在你的情況下,通過級聯)應用到分離的實體。您應該刪除級聯選項或使用merge()而不是persist()

如果您刪除級聯,我認爲即使沒有detach()也可以運行此代碼,因爲在這種情況下,entityA不會由em2管理。