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= ...
随机推荐
- Python开发简单记事本
摘要: 本文是使用Python,结合Tkinter开发简单记事本. 本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能. 最近很想对p ...
- LINUX 修改本机yum源为163镜像源
进入yum源配置目录 [root@localhost yum.repos.d]# cd /etc/yum.repos.d/ 备份系统yum源,用于日后恢复. [root@localhost yum.r ...
- fpga产生伪随机序列
1,一位模二加法法则:加减法等同于异或,没有进位. 2,将移位寄存器的某几级作为抽头进行模二加法后作为反馈输入,就构成了有反馈的动态移位寄存器.此方法产生的序列是有周期的. 3,假设移位寄存器的级数为 ...
- 【3】SpringMVC的Controller
1SpringMvc的Controller是线程安全的吗? (1)由于是单例,tomcat的多线程环境访问,属性必须是不可变的,如果可变,会产生脏数据,线程不安全 2Spring的事务管理 (1)ao ...
- predis的使用
predis是PHP连接Redis的操作库,由于它完全使用php编写,大量使用命名空间以及闭包等功能,只支持php5.3以上版本,故实测性能一般,每秒25000次读写. 将session数据存放到re ...
- redis key设计技巧
把表名转换为key前缀, 第二端放置表用于区分区key的字段–对应mysql中的主键的列名如userid. 3.放置主键值,如1,2,3,…..,a,b,c. 4.放要存储的列名 user表 user ...
- php 两种或的区别 or ||
php 两种或的区别 or || 实验代码. <?php $p = 999 or 1; var_dump($p); $q = 999 | 1; var_dump($q);
- 前端mvc mvp mvvm 架构介绍(vue重构项目一)
首先 我们为什么重构这个项目 1:我们现有的技术是前后台不分离,页面上采用esayUI+jq构成的单页面,每个所谓的单页面都是从后台胜场的唯一Id 与前端绑定,即使你找到了那个页面元素,也找不到所在的 ...
- JUnit测试,获取Spring MVC环境
@RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = { &qu ...
- Maven项目中突然找不到Build Path或maven dependencies library
这两天发现有个maven项目抽风了,一个是右击项目找不到Build Path了,一个是依赖的lib库没了,maven引入的依赖包导不了.后来发现是eclipse搞的鬼,出问题的是项目下的.classp ...