gpt4 book ai didi

java - 如何从 Google App Engine(Java) 数据存储中的子实体查询父实体?

转载 作者:行者123 更新时间:2023-12-01 06:16:24 29 4
gpt4 key购买 nike

我使用 JPA 注释在部门和员工之间创建了拥有的一对多关系。实体是:

Department(Parent)
String Id
String Name
List Employee(@OneToMany)

Employee(Child)
Key key
String firstName
String lastName
String Address
Department dept(@ManyToOne)

当输入员工的名字时,我想显示该员工的详细信息(姓氏和地址)以及他所属的部门。我没有找到任何解决方案来从子实体获取父信息。有没有办法从子实体获取父实体的信息?

我认为一种可能的解决方案是从子级获取父级 ID,并在另一个查询中获取父级详细信息。但我希望在单个查询中获得有关员工的所有信息。这可能吗?

这是我的代码。

Department Entity:
@Entity
public class Department {

@Id
private String id;

private String description;

@OneToMany(mappedBy = "department", fetch=FetchType.EAGER, cascade = CascadeType.ALL)
private List<Employee> employee = new ArrayList<Employee>();

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public List<Employee> getEmployee () {
return employee ;
}

public void setEmployee (List<Employee > employee) {
this.employee = employee ;
}
}

Employee Entity:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;

private String firstName;
private String lastName;
private String Address;

private String parent_Id;

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Department department;

public Key getKey() {
return key;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public String getAddress() {
return Address;
}

public void setAddress(String Address) {
this.Address = Address;
}
}

在后台插入实体的Android代码

Departmentendpoint.Builder builder1 = new                                          Departmentendpoint.Builder(AndroidHttp.newCompatibleTransport(), new JacksonFactory(), null);
Departmentendpoint dptendpoint = CloudEndpointUtils.updateBuilder(builder1).build();

Department dpt = new Department();
dpt.setDescription("Water Service");
List<Employee> m = new ArrayList<Employee>();
Employee mgr2= new Employee();
mgr2.setFirstName("Avinash"+i);
mgr2.setLastName("Patel"+i);
mgr2.setAddress("Vadodara");
m.add(mgr2);
dpt.setEmployee(m);

try {
dptendpoint.insertDepartment(dpt).execute();
} catch (IOException e) {
e.printStackTrace();
}

最佳答案

您可以从子实体的键中获取父 ID,但必须从数据存储中获取父实体。

您可以在每个员工实体中存储一个部门名称,这将为您节省一次 get 操作,但代价是额外的数据和更复杂的代码(您必须考虑部门名称更改等情况)。

更好的解决方案是将部门实体保留在内存缓存中。这样,您就可以省去数据存储区的麻烦,并保持数据模型和代码简单。

关于java - 如何从 Google App Engine(Java) 数据存储中的子实体查询父实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23494323/

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