`
- 浏览:
260940 次
- 性别:
- 来自:
北京
-
学习脚步----hibernate编程中的映射关系简单片面分析一下(自己学习)
注:在hibernate编程中的映射关系中用的最多的就是一对多多对一,下面通过一个小案例分析(cascade的使用和效果)来对最简单的进行阐述:(个人学习笔记)[size=x-small]三个类:
Cateory :
package entity;
public class Category {
private int id;
private String name;
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;
}
}
Topic:
package entity;
public class Topic {
private int id;
private String name;
private Category cate;
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 Category getCate() {
return cate;
}
public void setCate(Category cate) {
this.cate = cate;
}
}
Msg:
package entity;
public class Msg {
private int id;
private String name;
private Topic to;
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 Topic getTo() {
return to;
}
public void setTo(Topic to) {
this.to = to;
}
}
三个配置文件:
Category.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="entity">
<class name="Category" table="cate">
<id name="id" column="cid">
<generator class="native" />
</id>
<property name="name"
column="cname"
not-null="true" />
</class>
</hibernate-mapping>
Topic.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="entity">
<class name="Topic" table="topic">
<id name="id" column="tid">
<generator class="native" />
</id>
<property name="name"
column="tname"
not-null="true" />
<many-to-one name="cate" column="cate"></many-to-one>
</class>
</hibernate-mapping>
Msg.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="entity">
<class name="Msg" table="msg">
<id name="id" column="mid">
<generator class="native" />
</id>
<property name="name"
column="mname"
not-null="true" />
<many-to-one name="to" column="topic"></many-to-one>
</class>
</hibernate-mapping>
Cateory——> Topic——>Msg
1. 删除msg中的一条记录级联删除msg所对应的topic;
假设要删除的msg所对应的topic的id是1,写如下代码:
session.beginTransaction();
Msg msg=(Msg)session.get(Msg.class, 1);
session.delete(msg);
session.getTransaction().commit();
配置文件不做任何修改,那么删除的只是msg中的记录,topic中的记录依然存在。
如果在Msg.hbm.xml配置文件中修改为<many-to-one cascade=”all” name="to" column="topic"></many-to-one>,那么在运行上面代码的时候就分为两种情况了:1>如果msg表中topic为1的仅有要删除的那条msg是,那么结果就是:msg中的该条记录删除,topic表中topic的id为1的记录删除;2>如果如果msg表中topic为1的除了要删除的那条msg是还有别的msg使用的topic的id也是1,那么运行上面的代码的时候就会报错,原因是msg中外键字段在使用这id为1的topic记录。
删除msg中的一条记录级联删除msg所对应的topic的id所对应的所有的msg;
将Topic类修改为:
package entity;
import java.util.*;
public class Topic {
private int id;
private String name;
private Category cate;
private Set<Msg> msgs=new HashSet<Msg>();
public Set<Msg> getMsgs() {
return msgs;
}
public void setMsgs(Set<Msg> msgs) {
this.msgs = msgs;
}
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 Category getCate() {
return cate;
}
public void setCate(Category cate) {
this.cate = cate;
}
}
将Topic.hbm.xml修改为:
<class name="Topic" table="topic">
<id name="id" column="tid">
<generator class="native" />
</id>
<property name="name"
column="tname"
not-null="true" />
<many-to-one name="cate" column="cate"></many-to-one>
<set name="msgs">
<key column="fk"/>
<one-to-many class="entity.Msg"/>
</set>
</class>
则在运行:(Msg.hbm.xml中设置了cascade=“all”)
session.beginTransaction();
Msg msg=(Msg)session.get(Msg.class, 1);
session.delete(msg);
session.getTransaction().commit();
这段代码的时候结果是:msg表中的那条记录没有了,topic表中id为1的记录没有了,msg中其他使用topic的id为1的做外键的,外键字段全部变为NULL。
如果将Topic.hbm.xml修改为:
<class name="Topic" table="topic">
<id name="id" column="tid">
<generator class="native" />
</id>
<property name="name"
column="tname"
not-null="true" />
<many-to-one name="cate" column="cate"></many-to-one>
<set cascade="all" name="msgs">
<key column="fk"/>
<one-to-many class="entity.Msg"/>
</set>
</class>
运行上面的结果是:msg表中的那条记录没有了,topic表中id为1的记录没有了,msg中其他使用topic的id为1的做外键的记录也全部删除了。
[b]案例总结:开始的时候Topic和Msg是单向的多对一的外键关联:Msg中有Topic的对象做属性,Msg.hbm.xml中进行了<many-to-one cascade=”all” name=”topic” column=”fk”/>的配置,而另一方不进行任何的特殊配置。
配置了<many-to-one>就相当于是设置了从Msg到Topic的导航,Cascade=”all”的意思是:在对我Msg表做插入、删除、更新的时候,通过导航跟我关联的Topic也进行相应的操作。
后来,在Topic类中添加了Msg的set集合,并且在Topic的配置文件中添加了<set cascade="all" name="msgs"><key column="fk"/> <one-to-many class="entity.Msg"/></set>,那么就从设置了从Topic到Msg的导航。cascade="all"的意思是在对我Topic表进行插入、删除、更新操作的时候,通过导航跟我关联的Msg也进行相应的操作。[/b][/size]
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
hibernate 对象关系映射总结hibernate 对象关系映射总结hibernate 对象关系映射总结
Hibernate.jar包,Hibernate可以应用在任何使用JDBC的场合,包含 hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-...
hibernate的多种映射关系
Hibernate对象关系映射一对多 很基础等文档
关于Hibernate的基本数据类型与Java中基本数据类型的映射关系
对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳...
Hibernate 关联关系映射分类
JSP-车辆管理系统(struts+hibernate+spring+oracle) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! JSP-车辆管理系统(struts+hibernate+spring+oracle) JSP-车辆管理系统(struts+hibernate+spring+oracle) ...
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的关联关系,...
Hibernate 多表映射关系配置 如,一对一 多对一 多对多等
Hibernate映射解析 七种映射关系
hibernate表映射一直记不住,这次总结一下,放便下次使用。。。
便于同学们更好的学习hibernate,其中包含了hibernate的七种映射管、关系
hibernate 映射关系学习入门 多对多实体映射 源码
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
课程设计、毕业设计以及练手的优质java项目---网络购物系统(struts+hibernate) 课程设计、毕业设计以及练手的优质java项目---网络购物系统(struts+hibernate) 课程设计、毕业设计以及练手的优质java项目---网络...
hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd、hibernate.properties(5.0.7)
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
Hibernate 相关映射关系 Hibernate 相关映射关系 Hibernate 相关映射关系
spring-cloud-starter-gateway下的依赖hibernate-validator-5.0.3.Final.jar