0

私は MongoDB で永続化を行うために Kundera を使用しています。私のモデルには、一連の変数を持つエンティティ クラスがあり、これらのいくつかは別のエンティティ クラスのリストなどです。たとえば、エンティティ クラス Record のリストを持つ RecordVersion という名前のエンティティ クラスは、エンティティ クラス 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();

AuxiliarData の場合

 @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();

Referenceまですべてのネストを使用して、RecordVersionの完全なデータであるmongoDBに永続化できますが、Mongoのコレクション内の特定のRecordVersionに対して、たとえばレコードを追加した後、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 に答える