Hibernate 映射多对多关联关系
2017-11-07 21:22
274 查看
第一步首先设计数据库表, 我分别设计的是: 用户表. 角色表 . 关系表
第二步设计实体类:在用户表里面添加一个Set集合代码如下:
文件中要使用<many-to-many>标签,并且在标签中添加上对应的列关系,因为你要让两个对象中都要清楚它们之间的映射是如何使用的,并且在生成的关系表中哪一列是对应的自己的外键,所以要在该标签中指明,另外在<set>标签中添加table属性会指明要生成新表,下面的示例中添加了u_r,所以会生成新的关联表。
[html] view
plain copy
<?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>
<class name="com.src.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="uname"/>
<set name="roles" table="u_r">
<key column="uid"></key>
<many-to-many class="com.src.hibernate.Role" column="rid"></many-to-many>
</set>
</class>
</hibernate-mapping>
在角色表里面添加一个Set集合代码如下:
Roles.hbm.xml
因为是单向的关系,所以在该映射文件中就不需要添加多余的标签来维护关系了,它的内部代码也会很简单,对应的映射代码如下:
第三步配置Hibernade.cfg.xml文件
因为是单向的关系,所以在该映射文件中就不需要添加多余的标签来维护关系了,它的内部代码也会很简单,对应的映射代码如下:
[html] view
plain copy
<?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>
<class name="com.src.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
第四步在创建一个page包,一个class测试类里面写测试类内容,我的测试类名是:TestManyToMany
用户表运行结果如下:
角色表运行结果如下:
关系表运行结果如下:
双向的多对多映射可以看做是单向的一种扩展,它其实是为了设置在两端同时维护关系,从任何一端都能够加载到另一端的内容,在实现上和单向的起始端是相同的都要使用<many-to-many>标签。
同样以上面的User和Role来做示例,上面的示例中使用了单向的多对多,不同的是这里要使用双向关系,所以要在Role的一端添加同样的映射关系,并在相应的对象中添加集合映射,其中对应的User内的代码不会发生改变。
因为是双向的多对多所以要在对象的两端同时加入双向的集合映射,也就是在配置文件中添加<set>标签,并在标签中添加<many-to-many>标签,具体的配置方法类似于上文的User.hbm.xml的配置方法,如下:
[html] view
plain copy
<?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>
<class name="com.src.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- 添加集合映射,映射的表名应该同User.hbm.xml中配置的表名相同 -->
<set name="users" table="u_r">
<key column="rid"/><!-- 添加映射的外键 -->
<!-- 添加多对多的关系 -->
<many-to-many class="com.src.hibernate.User" column="uid"></many-to-many>
</set>
</class>
</hibernate-mapping>
2.2 Roles.java
同单向的多对多关系中的文件相同,不过需要在对象中添加集合映射Set,使用set来标明映射的集合,如下代码:
[java] view
plain copy
package com.src.hibernate;
import java.util.Set;
public class Roles
{
//id标示
private int rid;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//名称
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//用户集合
private Set users;
public Set getUsers() {
return users;
}
public void setUsers(Set users) {
this.users = users;
}
}
双向关联映射是在单向的关联映射基础上配置而来的,只需要在映射文件的两端同时配置<many-to-many>即可,也就是说Users.hbm.xml和Users.java代码和上文中的代码相同,不发生变化,所以不再重复添加了。
结语:
完整的单向多对多讨论完整,需要注意的主要是users.hbm.xml中配置的方法,需要使用<many-to-many>标签并且需要生成关系表来维护多对多的关系,其它的内容都是很简单的。
第二步设计实体类:在用户表里面添加一个Set集合代码如下:
User.hbm.xml
文件中要使用<many-to-many>标签,并且在标签中添加上对应的列关系,因为你要让两个对象中都要清楚它们之间的映射是如何使用的,并且在生成的关系表中哪一列是对应的自己的外键,所以要在该标签中指明,另外在<set>标签中添加table属性会指明要生成新表,下面的示例中添加了u_r,所以会生成新的关联表。[html] view
plain copy
<?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>
<class name="com.src.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="uname"/>
<set name="roles" table="u_r">
<key column="uid"></key>
<many-to-many class="com.src.hibernate.Role" column="rid"></many-to-many>
</set>
</class>
</hibernate-mapping>
在角色表里面添加一个Set集合代码如下:
Roles.hbm.xml
因为是单向的关系,所以在该映射文件中就不需要添加多余的标签来维护关系了,它的内部代码也会很简单,对应的映射代码如下:
第三步配置Hibernade.cfg.xml文件
因为是单向的关系,所以在该映射文件中就不需要添加多余的标签来维护关系了,它的内部代码也会很简单,对应的映射代码如下:
[html] view
plain copy
<?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>
<class name="com.src.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
第四步在创建一个page包,一个class测试类里面写测试类内容,我的测试类名是:TestManyToMany
用户表运行结果如下:
角色表运行结果如下:
关系表运行结果如下:
二、双向多对多
双向的多对多映射可以看做是单向的一种扩展,它其实是为了设置在两端同时维护关系,从任何一端都能够加载到另一端的内容,在实现上和单向的起始端是相同的都要使用<many-to-many>标签。同样以上面的User和Role来做示例,上面的示例中使用了单向的多对多,不同的是这里要使用双向关系,所以要在Role的一端添加同样的映射关系,并在相应的对象中添加集合映射,其中对应的User内的代码不会发生改变。
Roles.hbm.xml
因为是双向的多对多所以要在对象的两端同时加入双向的集合映射,也就是在配置文件中添加<set>标签,并在标签中添加<many-to-many>标签,具体的配置方法类似于上文的User.hbm.xml的配置方法,如下:[html] view
plain copy
<?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>
<class name="com.src.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- 添加集合映射,映射的表名应该同User.hbm.xml中配置的表名相同 -->
<set name="users" table="u_r">
<key column="rid"/><!-- 添加映射的外键 -->
<!-- 添加多对多的关系 -->
<many-to-many class="com.src.hibernate.User" column="uid"></many-to-many>
</set>
</class>
</hibernate-mapping>
同单向的多对多关系中的文件相同,不过需要在对象中添加集合映射Set,使用set来标明映射的集合,如下代码:
[java] view
plain copy
package com.src.hibernate;
import java.util.Set;
public class Roles
{
//id标示
private int rid;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//名称
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//用户集合
private Set users;
public Set getUsers() {
return users;
}
public void setUsers(Set users) {
this.users = users;
}
}
双向关联映射是在单向的关联映射基础上配置而来的,只需要在映射文件的两端同时配置<many-to-many>即可,也就是说Users.hbm.xml和Users.java代码和上文中的代码相同,不发生变化,所以不再重复添加了。
结语:
完整的单向多对多讨论完整,需要注意的主要是users.hbm.xml中配置的方法,需要使用<many-to-many>标签并且需要生成关系表来维护多对多的关系,其它的内容都是很简单的。
相关文章推荐
- Hibernate关联关系映射
- Hibernate关联关系映射-----双向一对多/多对一映射配置
- Hibernate关联关系映射
- 【Hibernate】--关联关系映射:一对多和多对一
- Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
- Hibernate 关联关系映射(多对多关联)
- hibernate教程--关联关系的映射详解
- Hibernate4学习总结(2)--配置形式的集合映射,关联关系映射
- Hibernate 实体关联关系映射----总结
- hibernate关联关系映射
- Hibernate框架中在.hbm.xml映射文件中配置表与表之间的关联关系
- hibernate多对一关联关系的映射与原理分析
- Hibernate关联关系映射-----双向一对多/多对一映射配置
- Hibernate关联关系映射
- hibernate映射总结详解: 按外键映射一对一关联关系
- Hibernate的关联关系映射
- 【Hibernate】--关联关系映射:多对多映射
- Hibernate关联关系映射_引言
- Hibernate-映射关系- 多对多关联关系
- Hibernate4学习总结(4)--注解形式的集合映射,关联关系映射