0

我正在使用 Kundera 在 MongoDB 中进行持久化。在我的模型中,我有具有一组变量的实体类,其中一些是另一个实体类的列表,等等。例如,一个名为 RecordVersion 的实体类具有实体类 Record 的列表,而 Record 又具有实体类 AuxiliarData 的列表。像这样的东西:RecordVersion > Record > AuxiliarData > References

@Entity
@Table(name = "recordVersion", schema = "TestDB@records")
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 = "TestDB@records")
 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();

对于辅助数据

 @Entity
 @Table(name = "AuxiliarData", schema = "TestDB@records")
 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 的该记录,例如在 Mongo 集合中为特定 RecordVersion 添加更多记录.

我尝试使用 em.merge(someRecordVersion),但没有奏效。

4

1 回答 1

0

默认情况下,MongoDB 的WriteConcernACKNOWLEDGED,与 Kundera-MongoDB 中使用的相同(意味着它将显示重复主键的错误等

您可以通过使用 em 级别属性将 WriteConcern 设置为 UNACKNOWLEDGED 来避免这些错误:

 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);
于 2015-11-17T10:23:01.033 回答