我是Objectify编码的新手,我需要你的帮助来解决多对多关系查询的问题。
我有两个名为User and Installation的实体:
@Entity
public class User {
@Id private String login;
private String password;
@Index private String name;
@Index private String firstName;
@Index private byte right;
}
@Entity
public class Installation {
@Id private long id;
@Index private long clientId;
@Index private String name;
private String address1;
private String address2;
@Index private String postCode;
private String city;
@Index private String countryCode;
@Index private int status;
}
用户可以访问多个安装,安装可以有多个用户:多对多关系。我想映射这些实体,但我不想在加载用户时系统地加载安装。因此,我创建了一个用于映射用户和安装的实体:
@Entity
public class InstallUser {
@Id private Long id;
@Index Key<User> userKey;
@Index Key<Installation> instalKey;
public void setLink(User user, Installation instal){
//initialize
this.userKey = Key.create(User.class, user.getLogin());
this.instalKey = Key.create(Installation.class, instal.getId());
}
}
你能帮我写一下查询:
提前感谢您的帮助。
答案 0 :(得分:0)
虽然数据存储区不为您做连接,但您仍然可以进行连接 - 您就是查询规划器。那么做RDBMS会做什么。例如,要执行#1(“加载由其登录标识的用户的所有安装”),您将:
Key<User>
InstallUser
Key<Installation>
批量加载installatons。使用Ref<?>
中的Key<?>
代替InstallUser
并使用@Load
注释自动提取Installation
,您可以更聪明一点
还有很多其他方法可以构建这些数据。根据关系的优点,您可以在User
或Installation
中使用list属性,而不是使用单独的关系实体。但是你走的是正确的道路。