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= ...
随机推荐
- jquery选择器 之 获取父级元素,子元素,同级元素
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link href ...
- ORACLE 11G负载均衡测试
Oracle 11g R2中,引入了SCAN(Single Client Access Name)的特性.该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的SCAN IP以及S ...
- 搭建基于hyperledger fabric的联盟社区(一) --前言
三个月前上面发了一个关于智群汇聚和问题求解研究的项目,我们公司做其中的一个子项目,就是基于区块链的科技信息联盟构建.利用区块链的去中心化特性,构建一个基于区块链的科技社区,以提供科技群智汇聚采集的基础 ...
- Pycharm安装工具包
1.在settings->Project Interpreter->configure interpreters->Install中可以找到所有的模块. PyCharm IDE会帮助 ...
- nginx.conf几个示例
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...
- PHPCMS分页原理
调用很方便,使用listinfo方法,如果小于1页不会返回分页字符串 $page = $_GET['page'] ? intval($_GET['page']) : '1'; $products = ...
- thinkphp使用自定义类方法
1.通过Model调用 <?php /** * 积分模型 api接口 */ class ApiModel{ private $url = 'http://js.yunlutong.com/Cus ...
- python开发模块基础:正则表达式
一,正则表达式 1.字符组:[0-9][a-z][A-Z] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字.字母.标点等等.假如你现在要求一个位置&q ...
- windows服务器审核失败消息:事件ID: 861 进程标识符:904
事件ID: 861 进程标识符:904 排查方法: win+R键调出运行窗口, 输入cmd 输入tasklist /SVC /FI “PID eq 904” 查找进程号904对应的是不是dhcp ...
- spring boot 集成 rabbitmq
1.使用默认的AmqpTemplate生产消费pojo时,pojo需要implement Serializable,否则会抛出org.springframework.amqp.AmqpExceptio ...