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

简介:

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

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,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
JavaScript 前端开发 Java
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
9 0
|
1月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
12 0
|
1月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——EmpDao层代码
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——EmpDao层代码
16 0
|
1月前
|
Java
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
10 0
|
1月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类
10 0
|
1月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——DeptDao层代码
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——DeptDao层代码
9 0
|
1月前
|
XML Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
11 0
|
1月前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Dept实体类和对应的配置信息
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Dept实体类和对应的配置信息
13 1
|
1月前
|
JavaScript Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
23 0
|
9月前
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
125 0