Java 休眠映射

Java 休眠映射,java,hibernate,mapping,Java,Hibernate,Mapping,我需要帮助在我的项目中建模一组表/类。我还需要关于如何为这些表进行hibernate映射的帮助。我的项目中有以下表格 人 组织机构 接触 地址 Person表可以有一个或多个地址。组织和联系人只能有一个地址。因此,我添加了以下列以建立表之间的关系 地址表有PersonId[因为一个人可以有多个地址] 组织和联系人表具有AddressId[因为这些表只能有一个地址] 我想知道我需要为这些表创建哪些java类。目前我有个人、地址、组织和联系人课程。不确定如何将Address类链接到Person、Or

我需要帮助在我的项目中建模一组表/类。我还需要关于如何为这些表进行hibernate映射的帮助。我的项目中有以下表格

  • 组织机构
  • 接触
  • 地址
  • Person表可以有一个或多个地址。组织和联系人只能有一个地址。因此,我添加了以下列以建立表之间的关系

    地址表有PersonId[因为一个人可以有多个地址]

    组织和联系人表具有AddressId[因为这些表只能有一个地址]

  • 我想知道我需要为这些表创建哪些java类。目前我有个人、地址、组织和联系人课程。不确定如何将Address类链接到Person、Organization和Contact类
  • 我想知道我是否应该把地址看作是一个组成部分还是一个实体。如何创建xml映射地址被视为一个组件
  • 地址表中的PersonId对于为组织和联系人创建的地址记录可能具有空值。我可以创建一个单独的表[say Person\u Address]来存储一个人的地址列表。但是有了这个链接表可能会提供Person和Address表之间的多对多关系。在这种情况下,我如何实施一对多关系

  • 我会按照你在第三章中的建议去做。 通过对Person类中的地址集使用OneToMany关系,将自动创建中间表,我猜它将对地址id具有唯一的约束

    编辑:只有在address类中添加相应的多对一注释并使用并将一对多注释映射到该字段时,才能在address表中获得引用。但是,由于您没有这样做,您将得到一个Person_地址表,即使是一对多关系,也不会创建任何额外的类

    您应该像在普通java中一样对类进行建模。也就是说,一个人将有一组地址,其他人将只有一个,而Address类将忽略其他人

    然后在Person类中添加@OneToMany注释,在其他类中添加@OneToOne注释。或者将其放在orm.xml中,尽管注释对于维护来说更好


    至于组件/嵌入式vs实体,我建议使用实体,因为它是最简单的,没有限制。不要一次使用很多概念,坚持走正道

    嗯。到目前为止,您尝试了什么?对于一个表来说,引用其他有时为空的表通常是不好的。我支持Barsju的回答,因为Hibernate可以处理一对多关系的限制。也就是说,多对多关系很可能不会成为问题。如果两个组织有相同的地址,这些对象不应该指向同一个实体吗?@ NaNaielFord:我会认为你的例子是一个例外情况,而在这个例子中有重复的地址。如果其中一个组织移动了怎么办。你可能会改变他们两人的地址。这是一个典型的字段,我会使用Cascade all-on,它不适用于多对多。有了多对多,你会得到很多不必要的开销。。