Java Hibernate:如何设置三个实体类、它们的联接表和保存在数据库中的关系
我有以下三个实体类Java Hibernate:如何设置三个实体类、它们的联接表和保存在数据库中的关系,java,hibernate,jpa,hibernate-mapping,jointable,Java,Hibernate,Jpa,Hibernate Mapping,Jointable,我有以下三个实体类 @Entity public class User { @Id @Column(nullable = false) @GeneratedValue(strategy= GenerationType.AUTO) private Integer id; } @Entity public class LanguageProficiencyLevel { @Id @Colum
@Entity
public class User {
@Id
@Column(nullable = false)
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
}
@Entity
public class LanguageProficiencyLevel {
@Id
@Column(nullable = false)
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
private String name; // A1, A2, B1 ... etc
}
@Entity
public class Language {
@Id
@Column(nullable = false)
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
private String name; //English, Chinese ect ...
}
目前在数据库中,我有大约20种语言保存在语言表中,6种语言熟练程度级别A1、A2、B1、B2、C1、C2保存在语言熟练程度级别表中
现在我有了实体类之间的以下关系
一个用户可以通过一个熟练程度掌握多种语言,一个熟练程度的语言为许多用户所知
因此,例如,用户可能懂英语,其英语水平可能为C1,同样,同一用户也可能懂西班牙语,其西班牙语水平可能为B1
在这里我了解到,用户和语言有着多对多的关系。但我不明白如何将语言熟练程度与用户或语言联系起来
我该如何将其保存在数据库中?我的想法是创建一个联接表(LanguageSkill),列名为user\u id、language\u id和languageProficiencyLevel\u id,创建用户时将插入该表行。我不确定这是否是实施它的方法。请给我一个想法如何做到这一点,应该是什么样的配置 正如你所说,用户和语言将有多对多的关系。而且,语言和语言熟练程度将有一对一的关系 因此,您必须创建一个映射表,该映射表将与所有3个表具有多对一关系。
请参阅此项以创建具有多列的映射表。用户和语言将如您所说具有多对多关系。而且,语言和语言熟练程度将有一对一的关系 因此,您必须创建一个映射表,该映射表将与所有3个表具有多对一关系。
请参阅此项以创建具有多列的映射表。实体对象之间的关系如下:
- 一个用户可以有多种语言,而一种语言可以有多个用户。因此,用户语言之间存在多对多关系
- 一种语言一次只能有一种熟练程度,但一种熟练程度可以有多种语言。因此,语言熟练程度与语言能力是一对多的关系
- 用户和语言能力之间的关系也是多对多的
希望这有用。实体对象之间的关系如下:
- 一个用户可以有多种语言,而一种语言可以有多个用户。因此,用户语言之间存在多对多关系
- 一种语言一次只能有一种熟练程度,但一种熟练程度可以有多种语言。因此,语言熟练程度与语言能力是一对多的关系
- 用户和语言能力之间的关系也是多对多的
希望这是有用的。你绝对应该像你说的那样创建另一个table LanguageSkill 语言和熟练程度是所谓的基础数据——它们的条目相对较少,并且独立于用户。它们都不应映射到用户 然后,用户应该与LanguageSkill有@OneToMany关系,这表示他对特定语言的知识。LanguageSkill对语言和熟练程度(以及用户)都有@manytone的影响 跳过LanguageSkill将导致模式中的数据重复,或者至少在所有Jointable都难以读取的模式中。
此外,它还将混合关注点-相对稳定的数据(语言、熟练程度)和经常变化的数据(一个人的语言知识)。你绝对应该像你说的那样创建另一个table LanguageSkill 语言和熟练程度是所谓的基础数据——它们的条目相对较少,并且独立于用户。它们都不应映射到用户 然后,用户应该与LanguageSkill有@OneToMany关系,这表示他对特定语言的知识。LanguageSkill对语言和熟练程度(以及用户)都有@manytone的影响 跳过LanguageSkill将导致模式中的数据重复,或者至少在所有Jointable都难以读取的模式中。 此外,它将混合关注点——相对稳定的数据(语言、熟练程度)和经常变化的数据(一个人的语言知识)