使用一对多或多对一

时间:2011-03-12 08:17:14

标签: hibernate one-to-many many-to-one

两节课:

部门任务

一个部门可以完成很多任务。一项任务只能属于一个部门。

那么使用一对多还是多对一?


one-to-many
class Department{
  private Set tasks;
}
class Task{
  ......
}
//
Department.hbm.xml
....
<set name="tasks">
    <key column="departId" />
    <one-to-many class="Task" />
</set>
.....

多到一个

class Department{

}
class Task{
  Department depart;
}
//
Task.hbm.xml
....
<property name="depart">
    <many-to-one class="Department" />
</property>
.....

有什么区别?

BTW,使用set和list有什么区别?

使用list(xml配置)的例子?

4 个答案:

答案 0 :(得分:2)

如果没有我想要的部门,任务就不可能存在,但是部门可以在没有与之关联的任务的情况下存在。所以依赖是将任务附加到部门的任务,因此应该是关系中的拥有者。多对一应该是你的选择。

答案 1 :(得分:0)

只要看一下结构,就会选择多对一的结构 如果必须将任务重新分配给另一个部门,则只需要更改任务对象,而不是原始部门对象。

从java集合中,Set不允许重复,而List可能

答案 2 :(得分:0)

您的选择取决于两件事:

  1. 使用此关系的各种方案有哪些。对于例如如果你需要按部门列出你的任务,那么你需要的是One to Many。由于您使用的是Hibernate,因此加载它们也很容易。

  2. 如果按部门更新任务,则还需要其他关系。

  3. 但是,请记住,这些决定深深扎根于您的域模型以及您希望如何构建它。使用这些实体的用例是什么?我强烈建议您阅读此SO thread以及watch this video by Eric Evans

    希望有所帮助。

答案 3 :(得分:-1)

您应该定义一个名为DEPARTMENT_TASKS的连接表,并且它们之间具有ManyToMany关系。