【发布时间】:2018-03-17 01:12:20
【问题描述】:
我正在尝试用 Java 创建一个任务列表应用程序,其中的任务可以有相关的任务。因此,任务类如下所示:
public class Task implements Serializable {
private static final long serialVersionUID = -5372927338757312018L;
private long id;
private String title;
private String description;
private Task parent;
private Set<Task> children;
任务被持久化到 postgres。目前有 2 个表:
tasks 表:id、title、description
parent_child 表:parent_id、child_id
为了反序列化,我检索有问题的任务,构造对象,然后检索每个依赖/子任务,构造它们,并将它们作为子任务添加到原始任务中。挑战在于每个子任务都可以有自己的依赖/子任务。
检索任务(以及它是否有任何子任务):
SELECT id, title, description, start, due, totalhours, completedhours,
(SELECT
COUNT(*)
FROM todo.parent_child
WHERE todo.parent_child.parent_id = '201'
) AS child_count
FROM todo.tasks
WHERE id = '201'
GROUP BY id, title, description, start, due, totalhours, completedhours;
如果 child_count 大于 0,我会跟进其他查询以检索依赖/子任务。
这一切都是可行的,但是是否有更好的方法来建模和/或持久化任务?更一般地,应该如何对具有嵌套对象列表的对象进行持久化和重构?
【问题讨论】:
-
不确定否决票,因为没有添加 cmets。如果我可以做些什么来改善这个问题,请告诉我。
-
你可以使用像 Hibernate 这样的 ORM 来完成持久化工作。如果你不能/不想使用这样的框架,你可以为列表中的每个任务递归调用加载任务方法。
-
谢谢 Michal,看起来 ORM 就是答案。我是数据方面的新手,所以这提供了很多选择(并回答了我的问题)。
标签: java sql postgresql