我没有太多的数据库设计经验,我尝试使用像休眠一样的ORM来理解它背后的一般逻辑。我有两个用户和语言表。用户可以知道一种或多种语言,因此两个表之间存在一对多关系。但是我有固定的语言版本,例如英语,西班牙语和法语。据我了解,每个新的用户实例持续存在,语言表中将有重复的条目与该人的外键。有没有办法阻止这个重复的条目?休眠一对多映射固定值
0
A
回答
0
你的理解有点困惑。您可以使用Foreign Key
来映射OneToMany
关系,并且有充足的数据库原因可以这样做,但通常是a JPA provider recommends against it。但是,您正在描述ManyToMany
关系。 A User
将(或可能)有许多Languages
。 A Language
将有很多Users
。当您创建许多与注释一对多的关系:
@Entity
public class Person {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@ManyToMany
private List<Language> languages;
和
@Entity
public class Language {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
JPA提供者将创建一个协会或Join Table
,从每个Entity
在它的ID:
create table Person_Language (Person_id bigint not null, languages_id bigint not null)
当你创建一种语言时,一个条目将被放入语言表中。当你创建一个用户时,一个条目将被放入用户表中。当您将语言添加到某个人的languages
时,则会将一个条目放入Join Table
。
insert into Person_Language (Person_id, languages_id) values (?, ?)
会有在连接表的Person_id
和languages_id
只有独特的组合,因此该数据库将很好正常化。由于您指出的原因,您将无法使用Language
实体中的Foreign Key
将语言指定给多个用户:对于任何给定的语言,只会有一个外键列。
相关问题
- 1. 一对多映射休眠
- 2. 休眠多对多映射
- 3. 休眠多个多对一映射
- 4. 休眠映射一对一
- 5. 休眠一对一映射
- 6. 休眠一对多单向映射表
- 7. 一对多映射ConstraintViolationException在休眠
- 8. 休眠映射多对一条件
- 9. 休眠映射:在休眠时删除一对多的双向映射
- 10. 休眠一一对一映射问题
- 11. 休眠 - 一个休眠映射
- 12. 休眠映射可选值
- 13. 休眠NULL值(XML映射)
- 14. 休眠映射
- 15. 休眠映射
- 16. 休眠:多家长对孩子映射
- 17. 休眠映射对象
- 18. 休眠映射一对一xml
- 19. 休眠子类一对一映射
- 20. 休眠一对一映射注解
- 21. 休眠 - 正确的一对一映射
- 22. Spring +休眠一对一映射
- 23. 关于一对一映射休眠
- 24. 休眠一对一映射问题
- 25. 休眠映射问题 - 一对一
- 26. 休眠一对一映射错误
- 27. 休眠一对一映射文件
- 28. 休眠一对一反向映射
- 29. 休眠一对一映射表现为一对多
- 30. 上映射:休眠