準備工作,建立兩個實體類如下:
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:
public class Wife {
生成資料庫如下:
OK, 下面開始:
1. 一對一:
1.1 單向外鍵關聯
使用注解 @OneToOne
目前Husband類中有一個wife對象,将其注解成OneToOne即可,那麼觀察生成的兩張表如下:
<a href="http://blog.51cto.com/xiaominghimi/969784#">?</a>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<code>mysql> </code><code>desc</code> <code>Husband;</code>
<code>+</code><code>---------+--------------+------+-----+---------+----------------+</code>
<code>| Field | Type | </code><code>Null</code> <code>| </code><code>Key</code> <code>| </code><code>Default</code> <code>| Extra |</code>
<code>| id | </code><code>int</code><code>(11) | </code><code>NO</code> <code>| PRI | </code><code>NULL</code> <code>| auto_increment |</code>
<code>| </code><code>name</code> <code>| </code><code>varchar</code><code>(255) | YES | | </code><code>NULL</code> <code>| |</code>
<code>| wife_id | </code><code>int</code><code>(11) | YES | MUL | </code><code>NULL</code> <code>| |</code>
<code>3 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.09 sec)</code>
<code>mysql> </code><code>desc</code> <code>Wife;</code>
<code>+</code><code>-------+--------------+------+-----+---------+----------------+</code>
<code>| Field | Type | </code><code>Null</code> <code>| </code><code>Key</code> <code>| </code><code>Default</code> <code>| Extra |</code>
<code>| id | </code><code>int</code><code>(11) | </code><code>NO</code> <code>| PRI | </code><code>NULL</code> <code>| auto_increment |</code>
<code>| </code><code>name</code> <code>| </code><code>varchar</code><code>(255) | YES | | </code><code>NULL</code> <code>| |</code>
<code>2 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>
其中如果想更改注解 @OneToOne預設為我們生成的Wife_id名,可以使用@JoinColumn(name="xxx") 即可;
1.2. 雙向外鍵關聯 :
仍然使用注解 @OneToOne
但是如果是雙向關聯,必須設定其@OneToOne(mappedBy="xxx") 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即可;
本文轉自 xiaominghimi 51CTO部落格,原文連結:http://blog.51cto.com/xiaominghimi/969784,如需轉載請自行聯系原作者