在这里,我们分别通过配置文件的方式和写注释的方式来创建表。
例子:
现在有一个顾客表和一个订单表,一个顾客可以拥有多个订单,而每个订单只能从属于一个客户,这就是一对多的意思。
1  | //顾客的字段  | 
1  | //订单的字段  | 
在这里我们需要解释一下了,一般的多对一或者一对多,可以放在一起理解,在创建表的时候,需要将外键设置到[多]的这一方,而不是放到[一]的这一方。即将外键放在此处的订单表中,而不是放到顾客表中,我们找的是从属关系,而不是拥有关系。因为我们要建的是双向的表,即可以通过任意一方找到另一方的数据。所以我们要来一点准备工作。
1  | //1.在顾客实体类中加入订单的set字段,当然get和set方法要转备好  | 
现在我们创建表:
1.使用配置文件的方式
使用Hibernate之前的准备工作就不在这里赘述了,直接说代码:
hibernate.cfg.xml的代码:
1  | 
  | 
Costum.hbm.xml的代码:(顾客实体类的配置文件)
1  | 
  | 
Order.hbm.xml中的代码:
1  | 
  | 
这是结果
2.使用注解的方式:
当然需要导入注解包才能进行.
hibernate.cfg.xml的代码:
和用配置文件的方法有一点不同:
1  | 
  | 
Order实体类:
有几点要注意:
1.所有注释用到的包都是javax下的,不要导错包.
2.主键和主键的生成策略要写到get方法之前,且必须有!!
3.生成表需要有!即@Entity@Table.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55package com.mi.beans;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
 //形成一个以"t_order"为名的表,表中的字段和该实体类中的字段相同(每张表必须要有,否则无法建立)
(name="t_order")
public class Order {
	private int oid;
	private String oname;
	private Costum costum;
	
	
	//订单中的顾客字段,要形成外键,"JoinColumn"表示在表中新增一个字段,表示该实体类中的字段,也是建立关系的字段
	
	(name="cid")
	public Costum getCostum() {
		return costum;
	}
	public void setCostum(Costum costum) {
		this.costum = costum;
	}
	//这是这个表的主键以及主键的生成策略(每张表必须要有,否则无法建立,注意实在get方法之前)
	
	
	public int getOid() {
		return oid;
	}
	public void setOid(int oid) {
		this.oid = oid;
	}
	public String getOname() {
		return oname;
	}
	public void setOname(String oname) {
		this.oname = oname;
	}
	
	public String toString() {
		return "Order [oid=" + oid + ", oname=" + oname + "]";
	}
	public Order(int oid, String oname) {
		super();
		this.oid = oid;
		this.oname = oname;
	}
	public Order() {
		super();
		// TODO Auto-generated constructor stub
	}	
}
Costum实体类:
该实体类和上面的差不多,只是在关系字段(order)有一点不同1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52package com.mi.beans;
import java.util.List;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
(name="t_costum")
public class Costum {
	private int cid;
	private String cname;
	private Set<Order> orders;
	//被映射为costum
	(mappedBy="costum")
	public Set<Order> getOrders() {
		return orders;
	}
	public void setOrders(Set<Order> orders) {
		this.orders = orders;
	}
	
	
	public int getCid() {
		return cid;
	}
	public void setCid(int cid) {
		this.cid = cid;
	}
	public String getCname() {
		return cname;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}
	public Costum(int cid, String cname) {
		super();
		this.cid = cid;
		this.cname = cname;
	}
	public Costum() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public String toString() {
		return "Costum [cid=" + cid + ", cname=" + cname + "]";
	}	
}
会形成和上一个方式相同的结果,
总结:
xml方式
hibernate.cfg.xml中的映射信息为下面的:
1  | <mapping resource="com/mi/beans/Costum.hbm.xml"/>  | 
- 一对多的信息需要写在set标签下(或其他)
 
1  | //Costum:  | 
1
2//Order:
<many-to-one name="costum" column="cid"></many-to-one>
注解方式
- hibernate.cfg.xml中的映射信息为下面的:
 
1  | <mapping class="com.mi.beans.Costum"/>  | 
1
2
3//Order:
(name="cid")
1  | //Costum:  | 
上述简单的讲述,如果有大神看到有问题的地方,不吝赐教!!!