具有相同实体的一对多

时间:2010-12-19 14:12:24

标签: java hibernate jpa entity one-to-many

我正在从数据库模式进行逆向工程(使用Hibernate),我希望在生成的实体中有以下内容:

public class Task implements Serializable {
    ...
    List<Task> dependentTasks = new ArrayList<Task>(0);
    ...
}

如果我以1:N关系进行,它将生成:

public class Task implements Serializable {
    ... 
    Task task; 
    List<Task> dependentTasks = new ArrayList<Task>(0);
    ...
}

如果我将其作为M:N关系,它将生成两个相同的列表:

public class Task implements Serializable {
    ...
    List<Task> dependentTasks_1 = new ArrayList<Task>(0);
    List<Task> dependentTasks_2 = new ArrayList<Task>(0);
    ...
}

1 个答案:

答案 0 :(得分:0)

编辑 - 您的逆向工程工具正在创建任务任务;使关系双向化。您可以从对象和生成的配置文件中删除属性,但关系将是单向的 - 您将无法再从子项转到父项。

我敢打赌,基础表有一个任务父级的列,类似于task_id。如果删除对父项的引用,则域模型将不再使用该列。

这是使用工具为您完成工作的危险。您应该深入了解文档并了解hibernate中单向和双向关系之间的区别。只是好奇,为什么你的域类必须没有'task'属性?

编辑 - 在您参考有关更改表格约束的评论时,请注意。您拥有的遗留数据模型意味着任务应该引用其父项。因此,在更改此设置时,您将更改旧模型包含的关系的语义。你可能会破坏事物。

我认为将数据库保留在原来的位置是一个更好的ID,并使您构建的模型符合底层关系的语义。换句话说,说'我们不想要任务'属性没有意义 - 你的表结构暗示你想要那个,并且它可能是出于某种原因而设计的。