我正在为一件看起来非常简单的事情而奋斗。 让我解释。 我有一个关于一个人的数据表,我决定使用电子邮件作为id
@Entity
public class Person{
@Id
@Column(name = "email")
String email;
...
我想要完成的是
麻烦的是,显然在gae中我不能使用join,而我根本无法理解如何创建具有级联效果的连接表。 欢迎任何帮助。 提前谢谢
答案 0 :(得分:0)
数据存储区不是关系数据库,因此在开始设计解决方案之前,您应该familiarise yourself使用这些概念。你要做的是将一个方形钉子放入圆孔中:你不仅会发现你缺少连接,你还必须实现自己的级联删除(提示:你可能不想这样做)这个,但是如果你这样做,并且你有很多数据,请看Task Queues)。
你没有提供太多的代码,我不知道JPA(提示:看Objectify,它更适合非关系数据存储)但你可能想要类似的东西这个(使用 Objectify 注释):
@Entity
public class Person {
@Id
String email;
...
}
然后我假设您将拥有某种Message
实体(您将其称为两列表):
@Entity
public class Message {
@Id
Long msgId;
@Index
Ref<Person> from;
@Index
Ref<Person> to;
...
}
根据您需要执行的查询,您可能需要创建自定义索引(阅读here)。请记住,对数据存储区的查询是索引扫描。
但是,比如说,您想要从Person A
发送到Person B
的邮件,您可以执行以下操作:
Person a = ofy().load().type(Person.class).id("a@example.com").now();
Person b = ofy().load().type(Person.class).id("b@example.com").now();
...
ofy().load().type(Person.class).filter("from =", Ref.create(a)).filter("to =", Ref.create(b)).list();
您可以使用代表电子邮件的字符串,而不是使用Ref<Person>
(基本上是Key
)。您可能也不想将email
用作@Id
,因为这会阻止用户更改其电子邮件地址。