多对多关联关系
多对多关联关系的建立需要借助第三个表来存储多对多关联关系信息的表。
在介绍这个关系前先介绍一个小案例,前一阵子web2.0星期的时候,也流行一个应用,就是一般blog或者信息分类网站常用的一个技术——Tag。在下面的例子里我也将建立一个Tag应用。
在写博客的时候,我们的文章并不一定只属于一种分类,比如我写了一篇文章吧,就拿现在这个为例,我可以说它是属于DataBase类的,一可以说是说与Hibernate类的,所以,我就将这篇文章放进这两个分类里面。
这样就有一种新的分类形式,对于分类与文章来说就是一个多对多的关系了。
首先将我的Message类分个类,建立一个tag类,MsgTag
public class MsgTag {
private int tagId;
private String tagName;
private Set msgs;
Message也要做点修改,那就是加上一个存放Tag类的属性:
public class Message {
private int msgId;
private String ttl;
private String desc;
private Date date;
private UserInfo user;
private Set tags;
建立数据库相关的表:
CREATE TABLE msgTag(
`tag_id` int(11) NOT NULL auto_increment,
`tag_name` char(20) NOT NULL default 0,
PRIMARY KEY (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
CREATE TABLE `msg_tag_role` (
`msg_id` int(11) NOT NULL ,
`tag_id` int(11) NOT NULL ,
PRIMARY KEY (`msg_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
其中msg_tag_role 用来存放message与tag关联关系的表。
在做多对多关系的配置中<many-to-many>节点很重要,基本两个表的应射文件都要用到这个节点。
先在Message.hbm.xml这个文件里加一个节点:
<set name="grps" table="msg_tag_role" cascade="save-update" fetch="join">
<key column="msg_id"/>
<many-to-many class="xiaojin.hibernate.entity.MsgTag" column="tag_id"></many-to-many>
</set>
同时MsgTag.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>
<class name="xiaojin.hibernate.entity.MsgTag" table="msgtag" >
<id name="tagId" type="java.lang.Integer">
<column name="tag_id" />
<generator class="native"></generator>
</id>
<property name="tagName" type="java.lang.String">
<column name="tag_name" />
</property>
<set name="msgs" table="msg_tag_role" cascade="save-update" inverse="false">
<key column="tag_id"/>
<many-to-many class="xiaojin.hibernate.entity.Message" column="msg_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
这样我们的多对多关系就建立起来了,可以看到,该关系的建立完全都是表msg_tag_role 起的作用。
测试方法:
public static void saveMsgAndTag(){
MsgTag tag1 = new MsgTag();
tag1.setTagName("yule");
MsgTag tag2 = new MsgTag();
tag2.setTagName("jingji");
Set grps = new HashSet<MsgTag>();
grps.add(tag1);
grps.add(tag2);
Message msg1 = new Message();
msg1.setTtl("yule_msg1");
msg1.setDesc("desc");
msg1.setTags(grps);
Message msg2 = new Message();
msg2.setTtl("yule_msg2");
msg2.setDesc("desc");
msg1.setTags(grps);
<span sty
分享到:
相关推荐
hibernate关联关系
Hibernate 关联关系映射分类
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的关联关系,...
详细讲解hibernate的关联关系,以及用实例讲解,非常详细
Hibernate关联关系练习【全】
Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ...
Hibernate关联关系.docHibernate关联关系.doc
Hibernate4中映射关系图解。
映射一对多关联关系 以Customer和Order为例: 一对多: 每个Customer可以有一个或者多个Order,因此Customer中应该有一个集合类型的属性,来引用所有关联的Order对象。 多对一。全实例讲解
Hibernate关联关系总结 一对多 多对一 多对多
hibernate里关联关系映射,各种关系解析,帮助大家搞清楚hibernate的关系映射
大致总结了一下Hibernate关联关系。提供相关的一些例子进行测试。
hibernate关联关系简单项目,也可以只运行Java文件不用JSP页面,运用MySQL
Hibernate关联关系映射.CHM Hibernate文档相关
针对hibernate中关于对象间的关联关系的配置
讲诉了关联的创建和使用 整理成了一份txt的文档 整个创建到使用的步骤都写在里面了
hibernate关联关系多对一实例
Hibernate关联关系配置,一对一,一对多,多对多,联合主键等的配置
Hibernate关联关系映射实例速查,帮助初学者学习。
hibernate ORM的实例,包括一对一,一对多,多对一,多对多的各种实例。 还有一些HQL语句的写法