Hibernate @Embedded与ManyToOne映射

时间:2018-12-04 08:54:48

标签: hibernate hibernate-mapping

我正试图在两个表UserCountry之间创建休眠映射,如下图所示。

Country表仅用于用户,而没有其他地方使用,因此我应该使用Embedded和Embeddable创建这些表,或者在创建表后仅执行多对一映射。

enter image description here

3 个答案:

答案 0 :(得分:1)

这取决于您的使用方式。如果您嵌入国家/地区数据,则该数据将在“用户”表中,并会加载用户数据。

如果在大多数情况下每次使用用户数据时都不需要国家/地区数据,则可以使用延迟初始化进行OneToMany映射。在这种情况下,仅在需要时才加载国家/地区数据,但要付出额外的数据库命中费用(可能会减少为联接)。

答案 1 :(得分:1)

这取决于您要何时加载国家/地区数据。如果使用嵌入式,则将在用户数据加载时加载国家/地区数据。但是如果您使用具有延迟初始化的OneToMany映射,则将在加载国家/地区数据时加载国家/地区数据。你需要它。 因此,这取决于您的使用。

答案 2 :(得分:0)

这是更个人的东西。有些人喜欢使用Embedded来抽象一些信息,而另一些人则更加纯粹。

根据我的经验,我更喜欢将实体映射为非常接近表上的实体。原因很简单:

  • 维护:如果一些新开发人员加入团队并且他没有太多冬眠经验,那么更容易理解映射上没有发生什么。
  • 更类似于SQL的查询:您的JPQL /条件查询将更接近生成的SQL。即使对于熟悉框架的人来说,嵌入式的抽象也会带来一些混乱。

正如已经提到的其他答案一样,您将始终将Country信息与User一起使用嵌入式。这是 EAGER 行为,通常在JPA / Hibernate上应避免。

因此,在您的情况下,我将使用多对一关系。