首页 > 其他分享 >【Hibernate框架开发之六】Hibernate中Annotation的关系映射&&组件映射!

【Hibernate框架开发之六】Hibernate中Annotation的关系映射&&组件映射!

时间:2022-11-25 11:36:49浏览次数:66  
标签:Hibernate name 映射 int 之六 public 注解 id OneToOne

本站文章均为​ 李华明Himi ​​原创,转载务必在明显处注明


准备工作,新建两个实体类如下:

Husband.class:


​package​​ ​​com.himi;​


 


​import​​ ​​javax.persistence.Entity;​


​import​​ ​​javax.persistence.GeneratedValue;​


​import​​ ​​javax.persistence.Id;​


​import​​ ​​javax.persistence.OneToOne;​


 


​@Entity​


​public​​ ​​class​​ ​​Husband {​


​@Id​


​@GeneratedValue​


​public​​ ​​int​​ ​​getId() {​


​return​​ ​​id;​


​}​


​public​​ ​​void​​ ​​setId(​​ ​​int​​ ​​id) {​


​this​​ ​​.id = id;​


​}​


​public​​ ​​String getName() {​


​return​​ ​​name;​


​}​


​public​​ ​​void​​ ​​setName(String name) {​


​this​​ ​​.name = name;​


​}​


​public​​ ​​Wife getWife() {​


​return​​ ​​wife;​


​}​


​public​​ ​​void​​ ​​setWife(Wife wife) {​


​this​​ ​​.wife = wife;​


​}​


​private​​ ​​int​​ ​​id;​


​private​​ ​​String name;​


​private​​ ​​Wife wife;​


 


​}​


wife.class:


​package​​ ​​com.himi;​


 


​import​​ ​​javax.persistence.Entity;​


​import​​ ​​javax.persistence.GeneratedValue;​


​import​​ ​​javax.persistence.Id;​


 


​@Entity​


​public​​ ​​class​​ ​​Wife {​


​@Id​


​@GeneratedValue​


​public​​ ​​int​​ ​​getId() {​


​return​​ ​​id;​


​}​


​public​​ ​​void​​ ​​setId(​​ ​​int​​ ​​id) {​


​this​​ ​​.id = id;​


​}​


​public​​ ​​String getName() {​


​return​​ ​​name;​


​}​


​public​​ ​​void​​ ​​setName(String name) {​


​this​​ ​​.name = name;​


​}​


​private​​ ​​int​​ ​​id;​


​private​​ ​​String name;​


 


​}​


生成数据库如下:

OK, 下面开始:

 1.  一对一:

          1.1 单向外键关联

使用注解   @OneToOne

当前Husband类中有一个wife对象,将其注解成OneToOne即可,那么观察生成的两张表如下:


​mysql> ​​ ​​desc​​ ​​Husband;​


​+​​ ​​---------+--------------+------+-----+---------+----------------+​


​| Field   | Type         | ​​ ​​Null​​ ​​| ​​ ​​Key​​ ​​| ​​ ​​Default​​ ​​| Extra          |​


​+​​ ​​---------+--------------+------+-----+---------+----------------+​


​| id      | ​​ ​​int​​ ​​(11)      | ​​ ​​NO​​   ​​| PRI | ​​ ​​NULL​​    ​​| auto_increment |​


​| ​​ ​​name​​    ​​| ​​ ​​varchar​​ ​​(255) | YES  |     | ​​ ​​NULL​​    ​​|                |​


​| wife_id | ​​ ​​int​​ ​​(11)      | YES  | MUL | ​​ ​​NULL​​    ​​|                |​


​+​​ ​​---------+--------------+------+-----+---------+----------------+​


​3 ​​ ​​rows​​ ​​in​​ ​​set​​ ​​(0.09 sec)​


 


​mysql> ​​ ​​desc​​ ​​Wife;​


​+​​ ​​-------+--------------+------+-----+---------+----------------+​


​| Field | Type         | ​​ ​​Null​​ ​​| ​​ ​​Key​​ ​​| ​​ ​​Default​​ ​​| Extra          |​


​+​​ ​​-------+--------------+------+-----+---------+----------------+​


​| id    | ​​ ​​int​​ ​​(11)      | ​​ ​​NO​​   ​​| PRI | ​​ ​​NULL​​    ​​| auto_increment |​


​| ​​ ​​name​​  ​​| ​​ ​​varchar​​ ​​(255) | YES  |     | ​​ ​​NULL​​    ​​|                |​


​+​​ ​​-------+--------------+------+-----+---------+----------------+​


​2 ​​ ​​rows​​ ​​in​​ ​​set​​ ​​(0.00 sec)​


其中如果想更改注解 @OneToOne默认为我们生成的Wife_id名,可以使用@JoinColumn(name=”xxx”) 即可;

      1.2.  双向外键关联 :

仍然使用注解  @OneToOne

但是如果是双向关联,必须设置其@OneToOne(mappedBy=”xxx”)

1.3  单向主键关联:

在@OneToOne 下继续使用注解:@PrimaryKeyJoinColumn  即可 ;

 1.4  双向主键关联

在另外一个关联类中,@OneToOne 下也继续使用注解:@PrimaryKeyJoinColumn

2.  一对一联合主键映射:

类似其他映射,只是联合主键在自定义名字时,不能使用 @JoinColumn,而是使用如下形式:


​@JoinColumns​​ ​​(​


​{​


​@JoinColumn​​ ​​(name=​​ ​​"wifeId"​​ ​​,referencedColumnName=​​ ​​"id"​​ ​​),​


​@JoinColumn​​ ​​(name=​​ ​​"wifeName"​​ ​​,referencedColumnName=​​ ​​"name"​​ ​​)​


​}​


 


​)​


这里wifeId和wifeName是自定义主键名,referencedColumnName则对应其主键名;

 

3.(嵌入式对象)组件映射:

将另外一个类成为实体类的一部分进行映射;

注意:1.成为其他实体类一部门的类不要注解为@Entity 实体类!

2. 使用@Embedded 将其类注解即可;

3.组件属性名名为了保证不与实体类属性名冲突,可以使用如下注解:

3.1 使用如下形式:


​@AttributeOverrides​​ ​​(​


​{​


​@AttributeOverride​​ ​​(name=​​ ​​"xx"​​ ​​,column=​​ ​​@Column​​ ​​(name=​​ ​​"xxx"​​ ​​)),​


​@AttributeOverride​​ ​​(name=​​ ​​"xx2"​​ ​​,column=​​ ​​@Column​​ ​​(name=​​ ​​"xxx2"​​ ​​)),​


 


​}​


​)​


3.2 在嵌入式对象里,对其属性使用@column进行设置;

 

4.多对一单向关联

很容易,直接使用注解  @ManyToOne

5.   一对多单向关联

如果直接使用  @OneToMany 进行注解,默认Hibernate当成多对多进行映射,如果需要设置一对多,那么如下继续注解:

@JoinColumn(name=”GroupId”)   加入这个即可让默认多对多,当成一对多处理;

 

6.一对多、多对一双向关联

一对多,多对一双向关联属于一个映射;直接使用mappedBy即可(  @OneToMany(mappedBy=”xxx”)  );

 

7. 多对多单向关联

使用注解    @ManyToMany ,其中如果想自定义中间表的表名和类名可以使用 @JoinTable 关键字;

 

8.多对多双向关联

关联两个实体类 @ManyToMany即可;


标签:Hibernate,name,映射,int,之六,public,注解,id,OneToOne
From: https://blog.51cto.com/xiaominghimi/5886062

相关文章