《Hibernate学习笔记九》:多对一和一对多的关联关系
前面介绍了一对一的关联关系在Hibernate应该如何来实现,这篇博文就来介绍下多对一和一对多的关联关系。
多对一和一对多的关联关系在我们的生活中也比较常见,例如,在我们学生时代,一个班级可以有多个学生,而一个学生只能属于一个班级,这就是一个多对一(一对多)的例子;
还有在我们的工作中,一个工作小组可以有多个用户,而一个用户只能属于一个小组,这也是一个多对一(一对多)的关系的例子。
1、多对一的单向关联关系
下面就以一个工作小组可以有多个用户,而一个用户只能属于一个小组,这个例子来进行设计介绍如何建立一个多对一的关联关系。
在类的层面上:在多的一方加另一个的引用
在数据库层面上:在”多对一”中”多”的一方设置外键即可
1.1、多对一单向的关联关系的Annotation实现
Group类
@Entity
@Table(name="t_group") //指定表名
public class Group {
private int idGroup;
private String nameGroup;
@Id
@GeneratedValue
public int getIdGroup() {
return idGroup;
}
public void setIdGroup(int idGroup) {
this.idGroup = idGroup;
}
public String getNameGroup() {
return nameGroup;
}
public void setNameGroup(String nameGroup) {
this.nameGroup = nameGroup;
}
}
User类
@Entity
@Table(name="t_user") //指定表名
public class User {
private int idUser;
private String nameUser;
private Group group;//指定外键
@ManyToOne //多对一 即一个组有多个用户,而一个用户只能属于一个组
@JoinColumn(name="group_id")
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
@Id
@GeneratedValue
public int getIdUser() {
return idUser;
}
public void setIdUser(int idUser) {
this.idUser = idUser;
}
public String getNameUser() {
return nameUser;
}
public void setNameUser(String nameUser) {
this.nameUser = nameUser;
}
}
由于User实体和Group实体,User是处于“多对一”中“多”的一方,因此,我们就在User类中设置一个Group的外键即可建立多对一的关联关系。
测试结果如下:
1.2、多对一单向的关联关系的XXX.hbm.xml实现
Group类和User类
Group和User类中,有相应的属性和get、set方法即可。
且User类中有一个Group的引用。
Group.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hibernate.mode