Java Hibernate设计困境;具有地址链接的父子关系

Java Hibernate设计困境;具有地址链接的父子关系,java,hibernate,entity-relationship,Java,Hibernate,Entity Relationship,我有一个现有的实体设计。有一个个体实体。监护人或未成年人存储为个人。如果u r a未成年人,u r分配了零个或多个监护人。此关系存储在不同的实体中 还有一个额外的要求;添加一个标志,表明如果设置了关系,则应将监护人地址用于次要。以后可以清除该标志。如果清除该标志,将使用现有地址,监护人地址的任何更改都不会覆盖未成年人的地址 未成年人和监护人之间的关系存储为 (未成年人个人身份证、监护人个人身份证、, 键入\u关系的\u) 其中,类型为的关系可以具有“合法”等值 它是否像向关系表添加新标志一样简单

我有一个现有的实体设计。有一个
个体
实体。
监护人
未成年人
存储为
个人
。如果u r a
未成年人
,u r分配了零个或多个监护人。此关系存储在不同的实体中

还有一个额外的要求;添加一个标志,表明如果设置了关系,则应将
监护人
地址
用于
次要
。以后可以清除该标志。如果清除该标志,将使用现有地址,监护人地址的任何更改都不会覆盖未成年人的地址

未成年人
监护人
之间的关系存储为

(未成年人个人身份证、监护人个人身份证、, 键入\u关系的\u)

其中,类型为的关系可以具有“合法”等值

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

address实体在单个表中包含个人id和个人地址

一旦设置了该标志,每个未成年人只能设置一次,因为如果有多个监护人的未成年人的每个监护人都要打开地址级联,则会造成混乱。 谢谢

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

担保关系(表/实体)
未成年人个人身份证
监护人个人身份证

地址(表/实体)
个人身份证
地址行1
城市
状态

如果你是
未成年人
个人
id为2,而a有
监护人
个人
id为1。这看起来像

Id Age (Individual)
1   40 Guardian
2    5 Minor

Minor Guardian (GuardianRelationShip)
2     1

IndividualId City State (Address)
1            LA    CA
2            NY    NY
一旦这些联系起来,我们的想法是,未成年人“2个人id”的地址将更改为NY/NY


如果有请求。也就是说,为未成年人使用监护人地址,并允许断开地址链接,您将如何做到这一点

您拥有AddressEntity。我会创建IndividualEntity。地址和未成年人的地址可以引用与其中一个监护人相同的地址实体(顺便说一句,几个监护人也可以住在同一个地址!)。之后,您可以检查未成年人的地址是否等于监护人的地址之一


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

允许
个人
条目而不允许相应的
地址
条目。如果要将其仅限于监护人,则仅当
个人
表的条目在
GuardianRelationship.Minor
列中没有相应的匹配项时才允许这种情况。如果地址为空,请查找guardian并使用该地址


如果你确实执行了上面的规则,确保你考虑改变结构的边缘情况,比如个人不再有一个列出的监护人,没有地址。地址存储为地址,对地址的引用存储在另一个实体中。在这个世界上,两者都是合并的,因此如果两个人住在同一个地址,则有两行数据,差异为个人id。因此,对于我来说,要更改未成年人的地址,我必须实际覆盖未成年人的地址。那么,您在地址中使用fk引用个人?反之亦然?在这种情况下,您可以从MinorEntity引用该地址。(或不是地址,而是关系条目,以保证未成年人提及其监护人的地址)未成年人和监护人不是实体。它们只是用户对两个人之间关系的定义。我将尝试更好地更新编辑以显示现有erd。无论如何,您必须更改数据库结构。更改数据模型有什么限制?您能正确地更改它吗?问题是更改数据模型。上层管理层害怕改变数据模型并导致问题,因此必须与共存设计一起工作。这在req之后将不起作用。声明应使用监护人地址,但用户可以覆盖。这肯定要求我存储用户的决定。@EnderWiggin为未成年人插入地址是一种覆盖。如果为空,则为父级的地址。如果是另一个地址,一个覆盖。我只看到两个问题;如果找不到地址,则假定该地址已链接。这意味着他们可以尝试为未成年人输入一个地址,这将中断链接。你说你是怎么解决这个案子的?还有,你怎么知道该使用哪个监护人的地址呢?一些高级逻辑可以在删除时复制地址。如果您有一个有两名监护人的案例,那么您可能希望有一个家庭/地址表和一个相关的个人来地址表。这确实消除了我上面提到的无效考虑。