【问题标题】:@OneToMany does not insert foreign key in Hibernate+JPA@OneToMany 不在 Hibernate+JPA 中插入外键
【发布时间】:2011-03-19 21:37:38
【问题描述】:

我遇到了一些奇怪的问题,我有一个用户表(使用类)和一个国家表(国家类)。一个用户可能有 N 个国家。因此,我使用 getter 和 setter 方法在用户类中添加了国家列表。在表中,我将 country_id 作为用户表中的外键。而且,我在用户类上有一个 @OneToMany。

现在,当我尝试在其中保留包含国家集合的 User 类时,我看到这些国家从未插入 :( 我设置了两个国家并插入了一个用户。所以我应该能够看到 2 个用户行不同的国家。但我只看到一个。

我只是感到困惑。我在这里做错了吗?

【问题讨论】:

    标签: hibernate jpa object mapping orm


    【解决方案1】:

    我认为你把所有事情都搞混了

    1. 每个用户可能有 0..* 个国家,但是“每个国家只能由 1 个用户拥有”吗? 这对我来说似乎不合理。因此我认为应该是@ManyToMany 关系而不是@OneToMany

    2. “在表中,我已将 country_id 作为用户表中的外键”。 对于@OneToMany,外键不存储在用户表中。简单理解:user的每条记录可以有1个country_id,怎么代表“ToMany”关系呢?将外键存储在表中是 @ManyToOne 的默认行为。

    3. 我看到从未插入国家/地区”。插入用户时自动插入国家,这与级联设置有关。只需添加合适的级联设置,它应该可以正常工作。 (虽然对我来说听起来不太合理)

    建议的做法是:

    1. 将 User.countries 设为 @ManyToMany

    2. 有一个user_country表,有2个FK,user_id和country_id,用来存储用户和国家的关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2013-03-03
      • 2017-04-20
      • 2020-08-01
      • 1970-01-01
      • 2013-06-28
      相关资源
      最近更新 更多