如何持久化具有嵌套对象列表的对象

时间:2018-03-16 16:29:51

标签: java sql postgresql

我正在尝试使用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,我会跟进其他查询以检索从属/子任务。

这一切都是可行的,但是有更好的方法来建模和/或持久化任务吗?更一般地说,如何保持和重建具有嵌套对象列表的对象?

1 个答案:

答案 0 :(得分:0)

正如我在评论中所写,您可以使用一些像Hibernate这样的ORM。在另一种情况下,您可以编写这样的递归方法:

Task loadTaskWithChildren(long taskId) {
  Task task = loadSingleTaskFromDb(taskId);
  for(long childId : getChildrenIds(taskId))
    task.addChild(loadTaskWithChildren(childId);
}