Objectify 코딩에 익숙하지 않아 다 대다 관계 쿼리의 문제를 해결하려면 도움이 필요합니다.Google App Engine Objectify 5.1.21 - 다 대다 관계 쿼리
@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());
}
}
은 당신이 쿼리를 작성하기위한 나를 도울 수 : 그래서, 매핑 사용자 및 설치에 대한 엔티티 생성
- 부하 자신의 로그인 (@id)에 의해 식별되는 사용자의 모든 설치;
- 해당 ID (@id)로 식별되는 설치에 액세스 할 수있는 모든 사용자를로드합니다.
- 로그인 (@id)으로 식별되고 그의 오른쪽 (예 : 오른쪽 = 2)으로 필터링 된 사용자의 모든 설치를로드합니다.
도움을 주셔서 감사합니다.
답장을 보내 주셔서 감사합니다. 올바르게 이해하면 쿼리 # 1과 # 2에 대해 목록을로드하기 위해 Objectify에 2 개의 쿼리를 실행해야합니다. 키를 >로드 한 다음 키 >에서 목록을로드하십시오. 1 개의 쿼리 만 작성할 수 있습니까? 쿼리 # 3에 대한 해결책이 있습니까? Ref >이 더 현명하다고하셨습니다. 당신은 발전 할 수 있었습니까? –
데이터 저장소가 조인을 수행하지 않으므로 단일 쿼리로 처리 할 수 없습니다. 데이터베이스 쿼리 플래너의 동작을 모방해야합니다. # 3의 경우 데이터를 비정규 화하는 것이 가장 쉽다는 것을 알 수 있습니다. 즉, 설치의 일부 데이터 ('right')를'InstallUser'로 가져 와서 필터링 할 수 있습니다. 데이터 저장소에는 몇 가지 단점이 있습니다. SQL이나 조인 또는 집계는 없지만 유지 보수가 필요없는 무한 확장 성 데이터베이스를 얻게됩니다. 이 거래가 가치가 있는지 여부는 앱 간 차이가 있습니다. – stickfigure
@stickfigure '@ Load' 주석은'Key'필드에도 적용되지 않습니까? –
markvgti