假设您有包含属性呼叫状态的报告 但需要记录每个状态变化以及由哪个用户记录。 所以你最有可能最终得到
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父键
这意味着在尝试创建报告状态时,尚未创建报告。
如何进行适当的映射,允许我同时提交两者
答案 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个表格将引用它们所指的状态。