Hibernate设计困境;父母与子女的关系与地址链接

时间:2011-10-11 15:57:13

标签: java hibernate entity-relationship

我有一个现有的实体设计。有一个Individual实体。 GuardianMinor存储为Individual。如果您是Minor,则指定零个或多个监护人。该关系存储在不同的实体中。

还有一项要求;添加标记以显示Guardian Address如果已设置关系,则应Minor使用Minor Guardian。人们可以在以后清除那面旗帜。如果该标志被清除,将使用现有地址,并且不会更改监护人的地址将覆盖未成年人的地址。

AddressMinor之间的关系存储为

  

(minor_individual_id,guardian_individual_id,   type_of_the_relationship)

  其中type_of_the_relationship可以具有诸如“合法”等的值。

是否像在关系表中添加新标志一样简单?添加后,未成年人的地址需要更改为监护人的地址。地址信息存储在另一个实体(Individual)中。这可以通过Hibernate内置功能完成吗?或者我们应该添加一个层来处理这个功能吗? Hibernate中有什么东西可以让我知道标志已经更新并且需要进行一组新的更新吗?

地址实体在单个表中包含个人ID和个人地址。

一旦设置了标志,它就只能为每个未成年人设置一次,因为它会导致混淆,让少数监护人为每个监护人打开地址级联。 感谢。

数据库结构:
个人(表/实体)
Id
年龄(视年龄而定,您被视为未成年人)

GuardianRelationShip(表/实体)
Minor_Individual_Id
Guardian_Individual_Id

地址(表/实体)
个人_Id
地址线1 市
状态

如果您的Guardian Individual ID为2,并且Id Age (Individual) 1 40 Guardian 2 5 Minor Minor Guardian (GuardianRelationShip) 2 1 IndividualId City State (Address) 1 LA CA 2 NY NY 的{​​{1}} ID为1.这看起来像

{{1}}

一旦这些链接起来,我们的想法是,次要“个人ID为2”的地址将更改为NY / NY。

如果有需求。说使用未成年人的监护人地址并允许取消链接地址,你会怎么做?

2 个答案:

答案 0 :(得分:0)

你有AddressEntity。我会创建IndividualEntity.address和minor的地址可以引用相同的AddressEntity作为监护人之一(BTW,几个监护人也可以住在同一个地址!)。之后,您可以检查未成年人的地址是否等于监护人的地址之一。

我不明白旗帜解决了哪个问题。请提供更多信息,以及一些代码来说明您的实体和关系。

答案 1 :(得分:0)

允许Individual条目没有相应的Address条目。如果您想将其限制为仅监护人,则仅在Individual表的条目在GuardianRelationship.Minor列中没有相应匹配时才允许这种情况。如果address为null,则查找监护人并使用该地址。

如果您确实强制执行上述规则,请确保考虑更改结构的边缘情况,例如个人不再拥有列出的监护人并且没有地址。