hibernate 一对多(级联关系)
hibernate 核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory>
<!-- DataSource配置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password"></property> <!-- 指定连接数据库所使用的SQL方言-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 控制台是否输出SQL语句 -->
<property name="show_sql">true</property>
<!-- 式化Hibernate的SQL输出语句 -->
<property name="hibernate.format_sql">true</property>
<!-- 指定程序是否在数据库自动创建表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定映射文件的路径 -->
<mapping resource="zr/com/pojo/TeamClass.hbm.xml"/>
<mapping resource="zr/com/pojo/Student.hbm.xml"/>
</session-factory> </hibernate-configuration>
实体类的映射关系
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="zr.com.pojo">
<!-- 配置映射关系 -->
<class name="TeamClass" table="team_class">
<!-- 配置主键和对应主键的属性 -->
<id name="classID" column="class_id">
<generator class="native"/>
</id>
<!-- 配置属性和相对应数据的列 -->
<property name="lfname" column="class_name"/>
<!-- 集合
cascade="all" 级联关系
inverse="true" 放弃管理外键
-->
<set name="students" table="student" cascade="all" inverse="true">
<!-- 外键 -->
<key column="class_id"/>
<!-- 一对多 -->
<one-to-many class="zr.com.pojo.Student"/>
</set>
</class> </hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping> <!-- 映射关系 -->
<class name="zr.com.pojo.Student" table="student">
<id name="id" column="stu_id">
<!-- 生成主键id的方式 -->
<generator class="native"/>
</id>
<property name="name" column="stu_name"/>
<!-- <property name="classId" column="class_id"/> --> <many-to-one name="teamClass" class="zr.com.pojo.TeamClass" column="class_id" cascade="all"/> </class> </hibernate-mapping>
package zr.com.pojo;
public class Student {
private int id;
private String name;
private TeamClass teamClass;
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 TeamClass getTeamClass() {
return teamClass;
}
public void setTeamClass(TeamClass teamClass) {
this.teamClass = teamClass;
}
public Student() {
super();
}
public Student(int id, String name, TeamClass teamClass) {
super();
this.id = id;
this.name = name;
this.teamClass = teamClass;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", teamClass="
+ teamClass + "]";
}
}
package zr.com.pojo; import java.util.HashSet;
import java.util.Set; public class TeamClass { private int classID; private String lfname; private Set<Student> students = new HashSet<Student>(); public int getClassID() {
return classID;
} public void setClassID(int classID) {
this.classID = classID;
} public String getLfname() {
return lfname;
} public void setLfname(String lfname) {
this.lfname = lfname;
} public Set<Student> getStudents() {
return students;
} public void setStudents(Set<Student> students) {
this.students = students;
} public TeamClass() {
super();
} public TeamClass(int classID, String lfname, Set<Student> students) {
super();
this.classID = classID;
this.lfname = lfname;
this.students = students;
} @Override
public String toString() {
return "TeamClass [classID=" + classID + ", lfname=" + lfname
+ ", students=" + students + "]";
} }
package zr.com.test; import java.util.List;
import java.util.UUID; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder; import zr.com.pojo.Student;
import zr.com.pojo.TeamClass; public class TestClass { public static void main(String[] args) { // 创建Configuration 对象
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
// 创建ServiceRegistry 对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
// 创建SessionFactory 对象
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
// 创建Session 对象
Session session = sessionFactory.openSession(); // 开启事务
session.beginTransaction();
// 创建实体类
Student student1= new Student();
student1.setName("lf");
Student student2= new Student();
student2.setName("gl"); TeamClass teamClass = new TeamClass();
teamClass.setLfname("java");
teamClass.getStudents().add(student1);
teamClass.getStudents().add(student2);
// 插入数据
session.save(teamClass); // 提交事务
session.getTransaction().commit(); }
}
hibernate 一对多(级联关系)的更多相关文章
- java框架篇---hibernate(一对多)映射关系
一对多关系可以分为单向和双向. 一对多关系单向 单向就是只能从一方找到另一方,通常是从主控类找到拥有外键的类(表).比如一个母亲可以有多个孩子,并且孩子有母亲的主键作为外键.母亲与孩子的关系就是一对多 ...
- hibernate 一对多 级联 保存修改 删除
一对多,一端设置: <set name="TWorkorderHistories" inverse="true" cascade="all&qu ...
- hibernate 一对一(级联关系)
hibernate 核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hiber ...
- hibernate(六) cascade(级联)和inverse关系详解
序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...
- 再谈Hibernate级联删除——JPA下的Hibernate实现一对多级联删除CascadeType.DELETE_ORPHAN
声明: 1.本文系原创,非抄袭或转载过来的. 2.本文论点都亲手做过实验论证. 3.本文所讲的Hibernate配置都基于注解的方式,hbm语法未提供. 非常多人对持久层概念搞不清JPA.Hibern ...
- hibernate 一对多关系中的孤儿属性
@OneToMany(targetEntity = BenefitType.class, mappedBy = "sitePerson",cascade = CascadeType ...
- 11.Hibernate一对多关系
创建JavaBean 一方: Customer private long cust_id; private String cust_name; private long cust_user_id; p ...
- Hibernate一对多和多对一关系详解 (转载)
:双向一对多关系,一是关系维护端(owner side),多是关系被维护端(inverse side).在关系被维护端需要通过@JoinColumn建立外键列指向关系维护端的主键列. publ ...
- Hibernate中的映射关系(一对多)
在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...
随机推荐
- 运用 jenkins 让你的项目优雅的持续化集成
0.到系统管理->系统设置 1.安装插件 Publish over SSH 2.配置 Publish over SSH 参数 1.pass 是私钥密码,此私钥文件放在安装 jenkins 的主机 ...
- K-means聚类分析MATLAB代码
function kmeans load q1x.dat; a1=round(98*rand+1); a2=round(98*rand+1); miao1=[q1x(a1,1),q1x(a1,2)]; ...
- js错误Cannot set property 'action' of null
Cannot set property 'action' of null [自己解决问题答案] 应该放到form里面 [网上答案]是页面无法加载完毕执行代码.可以把获取元素等一系列的操作放在 wind ...
- ActiveMQ面试题
什么是activemq activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. activemq的作用以及原 ...
- 剑指offer-第五章优化时间和空间效率(数组中出现次数超过一半的数字)
题目:输入一个数组,找出一个数字,它在数组中出现的次数超过数组的一半. 题目规定如果可以改变数组中元素的位置. 思路1:如果数组是排序的,那么中间元素的位置不就是次数超过数组一半的元素吗?是的,因此我 ...
- 关于使用modelsim的一点感想
使用modelsim的过程中工程结构是这样的 testbench中例化了一个模块a,模块a中调用了模块b,中间模块a在其他工程中用了一下,改了模块名字,同时内容也稍微修改了一下,用完之后复制回来覆盖了 ...
- 转载pll工作模式解析
PLL共有四种工作模式,只有理解了这四种工作模式的特点,才能在设计中选用恰当的模式,完成自己设计的预期功能.这四种工作模式分别是普通模式(Normal Mode).零延迟缓冲模式(Zero Delay ...
- 洛谷 P2879 [USACO07JAN]区间统计Tallest Cow
传送门 题目大意: n头牛,其中最高身高为h,给出r对关系(x,y) 表示x能看到y,当且仅当y>=x并且x和y中间的牛都比 他们矮的时候,求每头牛的最高身高. 题解:贪心+差分 将每头牛一开始 ...
- vue router 传参 获取不到query,params
千万要注意,获取query/params 是this.$route.query 不是this.$router.query!!!
- CENTOS7安装DOCKER步骤以及安装阿里镜像加速后无法正常启动服务的问题2018年1月
本文时间2017年12月7日,比较新,大家可以直接参考.有问题直接评论 我根据菜鸟教程通过yum install docker安装了docker,由于测试发现奇慢无比,所以就安装了阿里云的加速,随后也 ...