我正在尝试使用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个表:
任务表: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,我会跟进其他查询以检索从属/子任务。
这一切都是可行的,但是有更好的方法来建模和/或持久化任务吗?更一般地说,如何保持和重建具有嵌套对象列表的对象?
答案 0 :(得分:0)
正如我在评论中所写,您可以使用一些像Hibernate这样的ORM。在另一种情况下,您可以编写这样的递归方法:
Task loadTaskWithChildren(long taskId) {
Task task = loadSingleTaskFromDb(taskId);
for(long childId : getChildrenIds(taskId))
task.addChild(loadTaskWithChildren(childId);
}