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= ...
随机推荐
- linux基础【文件夹含义】
linux文件目录是一个树状的目录 bin -->可执行文件 boot-->操作系统引导文件,系统内核,启动信息 dev -->device,设备信息,计算机硬件设备信息 etc - ...
- shell 中并发执行
http://bbs.51cto.com/thread-1104907-1-1.html http://www.51testing.com/html/28/116228-238978.html htt ...
- System.Web.HttpRequestValidationException: 从客户端(dbFlag="<soap:Envelope xmlns...")中检测到有潜在危险的 Request.Form 值。
System.Web.HttpRequestValidationException: 从客户端(dbFlag="<soap:Envelope xmlns...")中检测到有潜 ...
- Hadoop体系结构之 Yarn
1.1 YARN 基本架构 YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManage ...
- quartz框架实现定时任务举例
简单的定时任务功能可以通过原生的java.util.Timer定义执行时间规则.继承java.util.TimeTask来定义执行逻辑来实现,更方便的是利用开源的quartz框架,只需定义几个spri ...
- laravel 中使用定时任务
Laravel5.3 Artisan Console 文档地址 http://laravelacademy.org/post/6228.html 1.在服务器上查看定时任务有哪些crontab -e ...
- debian下ror新建项目报错解决
一个是缺少mysql的开发包 sudo apt-get install libmysqld-dev 还有一个报错如下 debian ExecJS::RuntimeUnavailable: Could ...
- 如何在已经安装好的Nginx上增加新模块
学习资源: https://blog.csdn.net/dxm2025/article/details/41149865 https://blog.csdn.net/qq_36663951/artic ...
- Quartz.net 2.x 学习笔记03-使用反射加载定时任务
将定时任务信息存储在XML文件中,使用反射加载定时任务 首先新建一个MVC的空站点,使用NuGet添加对Quartz.net和Common.Logging.Log4Net1213的引用,同时使用NuG ...
- 杂项-操作系统-百科:Solaris
ylbtech-杂项-操作系统-百科:Solaris Solaris (读作 /se'laris:/ 或者 /so'le:ris/)是Sun Microsystems研发的计算机操作系统.它被认为是U ...