@OneToMany不插入外键在休眠+ JPA
问题描述:
我面临一些奇怪的问题,我有一个用户表(使用类)和国家表(*)。一个用户可能有N个国家。因此,我用getter和setter方法在用户类中添加了一个国家列表。在表中,我已将country_id作为用户表中的外键。而且,我在用户类上有一个@OneToMany。@OneToMany不插入外键在休眠+ JPA
现在,当我试图坚持一个国家集合的用户类,我看到这些国家永远不会被插入:(我设置两个国家和插入一个用户,所以我应该能够看到2个用户行不同的国家,但我只看到一个。
我只是不解。难道我做错了什么吗?
答
我想你已经混合所有东西
每个用户可能有0 .. *国家,但是那是“每个国家只能由1个用户拥有“? 它对我来说似乎不合理。因此我认为它应该是
@ManyToMany
而不是@OneToMany
。“在表中,我已将country_id作为用户表中的外键”。 对于
@OneToMany
,外键不存储在用户表中。这很容易理解:用户的每条记录可以有1个country_id,它如何表示“ToMany”关系?在表中存储外键是@ManyToOne
的默认行为。“我看到这些国家从未插入”。插入用户时自动插入国家,这与级联设置有关。只需添加合适的级联设置,它应该可以正常工作。 (尽管它没有听起来很合理的对我来说)
建议的方式做的是:
有无User.countries是
@ManyToMany
。拥有一个user_country表,其中有2个FK,分别是user_id和country_id,用于存储用户和国家之间的关系。