1

playorm は ManytoMany をサポートしているため、これに関連して 2 つの質問があります。

  1. ManyToMany の場合、エンティティはデータベースにどのように格納されますか。つまり、必要なテーブル/列ファミリの数です。
  2. また、com.alvazan.test.db パッケージにある例では、これは Account.java で使用されています。

    @NoSqlManyToMany
    private CursorToMany<Activity> activitiesCursor = new CursorToManyImpl<Activity>();
    

    同様の例をここに示します。ここでの私の懸念は、ManyToMany を実装するために常に CursorToMany を使用する必要があるかということです。

    はいの場合、CursorToMany はデータ レイヤーに属していないため、問題は発生しません (エンティティは POJO のままではありません)。

    いいえの場合、その逆は何ですか?

4

2 に答える 2

1

リンク先のリンクは、多対多のpojoの方法を示していますが、pojoメソッドを使用すると、リストに多すぎる場合にOutOfMemoryExceptionsが発生する可能性があります。そのため、カーソルも提供されます。あなたが私にくれたリンクの例を次のように変えましょう。

public class Student {
  @NoSqlId
  private String id;
  private String firstName;
  private String lastName;
  @ManyToMany
  private List<Course> courses = new ArrayList(); //constructing avoids nullpointers
}

public class Course {
  @NoSqlId
  private String id;
  private String name;
  private String description
  @ManyToOne
  private Lecturer lecturer;
  @ManyToMany
  private List<Student> students = new List<Student>();
}

* ToMany(OneToMany、ManyToMany)の場合、行自体に外部キーのリストを格納します。上記の例では、テーブルは2つだけです。行は次のようになります

studentrowkey -> firstName="dean", lastName="hiller", courses:courseFk56=null, courses:courseFk78=null, courses:courseFk98=null, etc. etc.

この方法ではなかったことに注意してください

studentrowkey -> firstName="dean", lastName="hiller", courses=courseFk56,courseFk78, courseFk98

前者を使用する理由は、列の操作が独立しているため、2つのサーバーが同じ学生で読み取った場合、1つのサーバーがcourseFk200を追加し、別のサーバーが学生からcourseFk56を削除して、両方のアクションが有効になるためです。代わりに後者の方法に従うと、サーバーの変更の1つが失われます。

後で、ディーン

于 2012-10-19T14:17:43.010 に答える
0

ありがとう!私のメモ: @NoSQLId は文字列のみを受け入れます! KeyValidationClass = org.apache.cassandra.db.marshal.UTF8Typeデフォルトの ColumnFamily が
原因で、「Astyanax Key Validation Exception」を受け取る他のタイプ。

于 2012-10-30T13:08:54.213 に答える