gpt4 book ai didi

java - 如何使用 jpa 通过查询 GAE 数据存储中的子项来获取父项的实体?

转载 作者:行者123 更新时间:2023-11-30 08:23:28 25 4
gpt4 key购买 nike

在 Google 应用引擎数据存储中,我有实体的 3 步层次结构。这 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 名员工的地址,这根本不可取。请告知我如何设计我的数据存储实体,以便我可以在一个或两个查询中检索所有员工及其地址详细信息。

感谢任何帮助。提前致谢!

最佳答案

如果只需要根据所在城市查询Employees,可以加一个List<String>您的 Employee 上的城市类(class)。这样您就可以运行类似 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;
}

这里也没有奇迹

关于java - 如何使用 jpa 通过查询 GAE 数据存储中的子项来获取父项的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23645757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com