Hibernate Mapping:如何创建/设计双向关系ENTITY?

时间:2013-08-15 01:53:18

标签: spring hibernate database-design erd

问题陈述

假设您有包含属性呼叫状态的报告 但需要记录每个状态变化以及由哪个用户记录。 所以你最有可能最终得到

REPORT
REPORT_ID

REPORT_STATUS
STATUS_ID
REPORT_ID

但如何在没有“计算”的情况下获得当前状态(即获取最后修改日期)

我想出了这个解决方案

REPORT
REPORT_ID
CURRENT_STATUS_ID

REPORT_STATUS
STATUS_ID
REPORT_ID

假设您需要更多属性,我怀疑这种创建表的方式在尝试CREATE REPORT然后尝试CREATE STATUS时会遇到一些hibernate问题。

我刚尝试使用注释为这种关系创建了hibernate映射。 我试图保存的每个人......我得到了

  

未找到STATUS_REPORT_PK父键

这意味着在尝试创建报告状态时,尚未创建报告。

如何进行适当的映射,允许我同时提交两者

1 个答案:

答案 0 :(得分:0)

这里似乎存在逻辑上的不一致

让我们说我们需要生成一份报告。现在存储了report_id,但我们需要一个状态ID。

但要获得新状态,我们需要指定报告。由于未创建报告,因此无法创建状态,反之亦然。

我假设状态数量有限,所以我们将它们存储在一个名为STATUS的表中

REPORT
REPORT_ID
CURRENT_STATUS_ID

REPORT_STATUS
STATUS_ID
REPORT_ID

STATUS
STATUS_ID

首先创建一个新报告并为其附加状态对象。 然后创建一个REPORT_STATUS

的对象

以防您设置级联类型将其删除。 Hibernate有时会感到困惑。

修改

你似乎对表格感到困惑

报告表将保存报告ID,有关报告的数据及其当前状态

report_status表将保存报告的所有先前状态以及表示为status_id和report_id的复合主键的当前状态

状态表将保存报告可能具有的所有可能状态。 例如。如果可能的状态为“暂停”,“正在生产”,“已发布”,“编辑”,则这些状态将存储在状态表中。

其他2个表格将引用它们所指的状态。