gpt4 book ai didi

java - 具有关系的对象形成(JDBC)

转载 作者:行者123 更新时间:2023-11-30 03:47:42 25 4
gpt4 key购买 nike

有 3 个实体(与表匹配):

public class Enterprise{
private long id;
private String name;
private List<Department> departments;

//getters()/setters()
}

public class Department{
private long id;
private String name;
private List<Employee> employees;

//getters()/setters()
}

public class Employee{
private long id;
private String name;
private List<Department> departments;

//getters()/setters()
}

企业---|OneToMany|---部门---|ManyToMany|---员工

有人可以在 JDBC 上编写方法吗:

List<Enterprise> findAll();

连接、语句、查询等可以忽略。主要困难是在正确的对象上设置所有引用(例如,避免:enterprise.getDepartments().get(1).getEmployees().get(1).getDepartments() == NULL) 。

示例(方法的开头):

 List<Enterprise> findAll(){
ResultSet rs = executeQuery(SELECT_ALL_ENTERPRISES);
List<Enterprise> ents = createEnterprises(rs);
.........

最佳答案

将对象映射到关系并不像看起来那么容易。他们已经为此努力了几十年,仅在某些场景中取得了不错的成果。好消息是,有效的场景可以适应大多数程序。

我建议您采取不同的方法,但首先我会给您一个示例,帮助您理解为什么我建议采用不同的方法。

想象一个人想要查找所有部门,这将需要查找所有员工(因为他们是部门对象的一部分)。这将要求对于每个员工,需要查找部门列表,这将要求这些部门需要员工列表,这将......

也许现在您明白了。

许多与您的系统结构相似的系统在查找部门时实际上不会返回完整的员工。他们返回“员工标识符”。这允许人们查找所有部门,但它保证不会返回任何员工,从而防止无限循环。然后,如果一个人足够感兴趣,他们可以使用员工标识符来查找单个员工,其中当然会包含部门标识符。

总之,我建议你不要真正重建这个级别的关联。我建议您构建对象网格的断开连接图,以便稍后可以轻松导航断开连接图。然后,如果您确实必须连接它们,那么在开始将引用编织在一起之前,您至少将加载所有数据而无需递归。

关于java - 具有关系的对象形成(JDBC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213935/

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