在Google应用引擎数据存储中,我有3步实体层次结构。这三个实体是..
Department(Parent Entity)
-Id
-Department Name
-list of Employee(@OneToMany)
Employee(Child of Department)
-key
-firstName
-lastName
-phoneNumber
-list of Address(@OneToMany)
Address(Child of Employee)
-key
-city
-pincode
如果我需要检索具有各自地址的特定城市的所有员工,我应该创建哪些实体?使用我现有的数据存储区设计,我需要查询n次以检索n个员工的地址,这完全不可取。 请告知我如何设计我的数据存储区实体,以便我可以将所有员工的地址详细信息检索到一个或两个查询。
感谢任何帮助。提前谢谢!
答案 0 :(得分:3)
如果您只需要根据其所在城市查询员工,则可以在List<String>
课程中添加Employee
个城市。这样您就可以运行SELECT e FROM Employee e WHERE :cityQueried IN e.cities
您必须保持城市和地址之间的同步。
public class Employee {
@Id
private Key key;
@Basic
private String firstName;
@Basic
private String lastName;
@OneToMany
private List<Address> addresses;
@Basic
private List<String> cities;
/**
* Same goes for removeAddress...
*/
public void addAddress(Address address) {
addresses.add(address);
cities.add(address.city);
}
}
编辑:
不幸的是,如果要查询实体,则必须在其自己的属性和/或其祖先(父)键上执行此操作。
如果您的员工只有有限数量的地址,则另一种解决方案是直接在Employee
实体上存储地址属性:
public class Employee {
@Id
private Key key;
@Basic
private String firstName;
@Basic
private String lastName;
@Basic
private String address1City;
@Basic
private String address1ZipCode;
@Basic
private String address2City;
@Basic
private String address2ZipCode;
}
这里没有奇迹