由于playorm支持ManytoMany,我有两个与此相关的问题:
此外,在com.alvazan.test.db包中给出的示例中,这是在Account.java中使用的:
@NoSqlManyToMany
private CursorToMany<Activity> activitiesCursor = new CursorToManyImpl<Activity>();
给出了一个类似的例子here。 我关心的是我们是否总是需要使用CursorToMany来实现ManyToMany?
如果是,它不会导致任何问题,因为CursorToMany不属于数据层(实体不会保留POJO)。
如果不是,那么反过来又是什么呢?
答案 0 :(得分: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),我们在行中存储外键的LIST。在上面的示例中,只有两个表。一行看起来像这样
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
我们使用前者的原因是列操作是独立的,因此如果两个服务器在同一个学生中读取...一个服务器可能添加courseFk200而另一个服务器可能会从学生中删除courseFk56,您的这两个操作都将生效。如果您遵循后一种方法,则服务器的一项更改将会丢失。
后, 迪恩
答案 1 :(得分:0)
谢谢!我的注释: @NoSQLId只接受String!
任何其他类型,您将收到“Astyanax密钥验证异常”,因为默认ColumnFamily KeyValidationClass = org.apache.cassandra.db.marshal.UTF8Type 。