博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Hibernate框架开发之六】Annotation关系映射&组件映射!
阅读量:6469 次
发布时间:2019-06-23

本文共 3186 字,大约阅读时间需要 10 分钟。

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

Husband.class:

 

 
  1. package com.himi; 
  2.  
  3. import javax.persistence.Entity; 
  4. import javax.persistence.GeneratedValue; 
  5. import javax.persistence.Id; 
  6. import javax.persistence.OneToOne; 
  7.  
  8. @Entity 
  9. public class Husband { 
  10.     @Id 
  11.     @GeneratedValue 
  12.     public int getId() { 
  13.         return id; 
  14.     } 
  15.     public void setId(int id) { 
  16.         this.id = id; 
  17.     } 
  18.     public String getName() { 
  19.         return name; 
  20.     } 
  21.     public void setName(String name) { 
  22.         this.name = name; 
  23.     } 
  24.     public Wife getWife() { 
  25.         return wife; 
  26.     } 
  27.     public void setWife(Wife wife) { 
  28.         this.wife = wife; 
  29.     } 
  30.     private int id; 
  31.     private String name; 
  32.     private Wife wife; 
  33.      

wife.class:

 

 
  1. package com.himi; 
  2.  
  3. import javax.persistence.Entity; 
  4. import javax.persistence.GeneratedValue; 
  5. import javax.persistence.Id; 
  6.  
  7. @Entity 
  8. public class Wife { 
  9.     @Id 
  10.     @GeneratedValue 
  11.     public int getId() { 
  12.         return id; 
  13.     } 
  14.     public void setId(int id) { 
  15.         this.id = id; 
  16.     } 
  17.     public String getName() { 
  18.         return name; 
  19.     } 
  20.     public void setName(String name) { 
  21.         this.name = name; 
  22.     } 
  23.     private int id; 
  24.     private String name; 
  25.      

生成数据库如下:

OK, 下面开始:

 1.  一对一:

          1.1 单向外键关联

使用注解   @OneToOne

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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    
|                |
+
---------+--------------+------+-----+---------+----------------+
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    
|                |
+
-------+--------------+------+-----+---------+----------------+
rows 
in 
set 
(0.00 sec)

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

      1.2.  双向外键关联 :

仍然使用注解  @OneToOne

但是如果是双向关联,必须设置其@OneToOne(mappedBy="xxx")     xxx表示对方那里是主导属性名"

1.3  单向主键关联:

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

 1.4  双向主键关联

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

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

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

 

 
  1. @JoinColumns
  2.         { 
  3.             @JoinColumn(name="wifeId",referencedColumnName="id"), 
  4.             @JoinColumn(name="wifeName",referencedColumnName="name"
  5.         } 
  6.          
  7.     ) 

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

 

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

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

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

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

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

3.1 使用如下形式:

 

 
  1. @AttributeOverrides
  2.         { 
  3.             @AttributeOverride(name="xx",column=@Column(name="xxx")), 
  4.             @AttributeOverride(name="xx2",column=@Column(name="xxx2")), 
  5.              
  6.         } 
  7.     ) 

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

 

4.多对一单向关联

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

5.   一对多单向关联

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

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

 

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

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

 

7. 多对多单向关联

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

 

8.多对多双向关联

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

本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/969784,如需转载请自行联系原作者
你可能感兴趣的文章
MyBatis+Spring结合
查看>>
Office 365之SkyDrive Pro
查看>>
Java Web 高性能开发
查看>>
初识Scala反射
查看>>
第三十九天
查看>>
Redis详解
查看>>
论程序员加班的害处
查看>>
codeblocks快捷键
查看>>
基于HTML5的WebGL设计汉诺塔3D游戏
查看>>
WPF资料链接
查看>>
过滤DataTable表中的重复数据
查看>>
再次更新
查看>>
mysql的数据类型int、bigint、smallint 和 tinyint取值范围
查看>>
移动铁通宽带上网设置教程
查看>>
Python算法(含源代码下载)
查看>>
利用Windows自带的Certutil查看文件MD5
查看>>
通过原生js添加div和css
查看>>
查询指定名称的文件
查看>>
AJAX POST&跨域 解决方案 - CORS
查看>>
开篇,博客的申请理由
查看>>