2015-11-04 74 views
0

我正在使用Kundera在MongoDB中執行持久性。在我的模型中,我有具有一組變量的實體類,其中一些是另一個實體類的List,依此類推。例如,名爲RecordVersion的實體類具有實體類Record的列表,而實體類Record又具有實體類AuxiliarData的列表。 事情是這樣的:RecordVersion>錄製> AuxiliarData>引用如何使用Kundera在MongoDB中執行更新級聯

@Entity 
@Table(name = "recordVersion", schema = "[email protected]") 
public class RecordVersion { 
    @Id 
    @Column(name="idRecordVersion") 
    private String idRecordVersion; 

    //others variables..  

    @OneToMany (cascade={CascadeType.ALL}, fetch=FetchType.EAGER") 
    @JoinColumn(name="idRecordVersion") 
    private List<Record> record = Lists.newArrayList(); 

備案

@Entity 
@Table(name = "Record", schema = "[email protected]") 
public class Record { 
    @Id 
    @Column(name="idRecord") 
    private String idRecord; 

    //others variables.. 

    @OneToMany (cascade={CascadeType.ALL}, fetch=FetchType.EAGER) 
    @JoinColumn(name="idRecord") 
    private List<AuxiliarData> auxiliarData = Lists.newArrayList(); 

對於AuxiliarData

@Entity 
@Table(name = "AuxiliarData", schema = "[email protected]") 
public class AuxiliarData { 
    @Id 
    @Column(name="idAuxiliarData") 
    private String idAuxiliarData; 

    //others variables.. 

    @OneToMany (cascade={CascadeType.ALL}, fetch=FetchType.EAGER) 
    @JoinColumn(name="idAuxiliarData") 
    private List<References> references = Lists.newArrayList(); 

我可以在MongoDB中堅持,RecordVersion的完整的數據,所有的嵌套直到引用,但是,對於特定的RecordVersion,我無法對RecordVersion的記錄進行更新,例如添加更多記錄之後在Mongo的收集。

我試過用em.merge(someRecordVersion),但沒有工作。

+0

em.merge()'後顯示任何錯誤? –

+0

您使用的是哪個版本的昆德拉? –

+0

@dev我使用昆德拉 - 蒙戈3.0 \t \t com.impetus.kundera.client \t \t 昆德拉 - 蒙戈 \t \t 3.0 \t user1783933

回答

0

默認情況下爲WriteConcern MongoDB是ACKNOWLEDGED同在昆德拉,MongoDB是使用(意味着它會顯示錯誤的重複主鍵等

你可以通過設置WriteConcern避免這些錯誤未確認使用EM級屬性:

em.setProperty(MongoDBClientProperties.WRITE_CONCERN, WriteConcern.UNACKNOWLEDGED); 

示例代碼:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("records"); 
EntityManager em = emf.createEntityManager();   
em.setProperty(MongoDBClientProperties.WRITE_CONCERN, WriteConcern.UNACKNOWLEDGED); 
RecordVersion recVersion = new RecordVersion(); 
//setting children 
em.merge(recVersion); 
+0

@ user1783933做的解決方案爲您工作? –