我有一个webapp,它有一个包含自身集合的对象.我正在努力解决如何在MySQL数据库中对此进行建模的问题.它是一个包含子任务列表的Task对象.这是这个类的样子:Task.javapublic class Task{ private int taskID;private...

我有一个webapp,它有一个包含自身集合的对象.我正在努力解决如何在MySQL数据库中对此进行建模的问题.它是一个包含子任务列表的Task对象.这是这个类的样子:
Task.java
public class Task{
private int taskID;
private String name;
private String details;
private List<Task> subTasks
...other properties
public Task(int taskID, String name, String details){
this.taskID = taskID;
this.name = name;
this.details = details;
this.subTasks = new ArrayList<>();
}
Getters and Setters here...
}
通过一些研究并自己思考,我想出了一个可能的解决方案.我有一个UML图的图像,但由于我刚加入而且我的SO代表还不够高,所以无法发布它.所以我尽力用以下字符显示:
--------------------- -------------------
| Task | | SubTaskMap |
--------------------- 1 __∞_|-----------------
| int taskID |----|__∞_|int subTaskID |
| String taskName | |int parentTaskID |
| String taskDetail | -------------------
--------------------
因此,subTaskID和parentTaskID都是表SubTaskMap中的主键以及表Task中的taskID的外键(同样,它们都是Java中的Task对象).据我所知,在此设置中运行查询以查找与parentTaskID关联的所有任务,我将不得不创建Task表的别名.
我在MS Access中对此进行了全部建模,并且为了获得与parentTaskID为5相关联的所有任务的查询,我指定了Task.taskID与SubTaskMap.subTaskID之间的连接以及别名表Task_Copy和SubTaskMap之间的另一个连接,该连接将Task_copy.taskID与SubTaskMap.parentTaskID获得了这样的SQL查询:
SELECT Task.taskName, SubTask.parentTaskID
FROM Task AS Task_Copy INNER JOIN (Task INNER JOIN SubTask ON Task.taskID = SubTask.subTaskID) ON Task_Copy.taskID = SubTask.parentTaskID
WHERE (((SubTask.parentTaskID)=5));
那么这是解决这个问题的好方法还是有更好的方法?
谢谢你的帮助!
解决方法:
我想你有一个Composite pattern的案例.看看这篇文章:
What are the options for storing hierarchical data in a relational database?我会选择邻接列表:
将字段ParentTaskId添加到表中,并完全取消SubTaskMap表.
本文标题为:如何在MySQL数据库中建模保存自身实例的Java对象?


基础教程推荐
- 关于@Bean的使用方式 2022-09-03
- SpringBoot整合SpringSecurity实现认证拦截的教程 2023-07-15
- java线程安全锁ReentrantReadWriteLock原理分析readLock 2023-06-10
- Java实现简单客户信息管理系统 2022-11-14
- idea web项目没有小蓝点的的两种解决方法 2023-02-27
- 解决IntelliJ IDEA输出中文显示为问号问题的有效方法 2023-03-06
- java数据结构与算法数组模拟队列示例详解 2022-12-06
- Java设计模式之责任链模式详解 2023-03-21
- Java 数据结构之删除链表中重复的结点 2023-08-07
- java中Calendar与Date类型互相转换的方法 2023-05-18