hibernate的多对多配置
Teacher.java
package com.xiaostudy.domain; import java.util.HashSet;
import java.util.Set; /**
* Teacher
*
* @author xiaostudy
*
*/
public class Teacher {
// id
private Integer id;
// 普通属性
private String name;
// 另一个类的集合
private Set<Student> students = new HashSet<Student>(); // 自动生成get、set方法
public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Set<Student> getStudents() {
return students;
} public void setStudents(Set<Student> students) {
this.students = students;
} }
Student.java
package com.xiaostudy.domain; import java.util.HashSet;
import java.util.Set; /**
* Student
*
* @author xiaostudy
*
*/
public class Student {
// id
private Integer id;
// 普通属性
private String name;
// 另一个类的集合
private Set<Teacher> teachers = new HashSet<Teacher>(); // 自动生成get、set方法
public Integer 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 Set<Teacher> getTeachers() {
return teachers;
} public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
} public void setId(Integer id) {
this.id = id;
} }
Teacher.hbm.xml
<?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="com.xiaostudy.domain">
<!-- name为bean的类名,table为数据库的表名 -->
<class name="Teacher" table="t_teacher">
<!-- name为bean的id,column为数据库表的列名 -->
<id name="id" column="id">
<!-- 设置自动更新表,表没有的话创建一个,有的话,再判断结构是否为所需,如有没有想应得列,会自动添加列,多余的也不会删除 -->
<generator class="native"></generator>
</id>
<!-- name为普通属性,column为数据库表的列名,type为数据类型 -->
<property name="name" column="name" type="string"></property>
<!-- name为bean中另一个类的集合名称,table为多对多中间的表,cascade为级联设置自动更新表 -->
<set name="students" table="t_teacher_student" cascade="save-update">
<!-- 自身连接外面的外键 -->
<key column="tid"></key>
<!-- column为另一个连接的外键,class为另一个bean的类名 -->
<many-to-many column="sid" class="Student"></many-to-many>
</set>
</class>
</hibernate-mapping>
Student.hbm.xml
<?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="com.xiaostudy.domain">
<class name="Student" table="t_student">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name" type="string"></property>
<set name="teachers" table="t_teacher_student">
<key column="sid"></key>
<many-to-many column="tid" class="Teacher"></many-to-many>
</set>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?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>
<!-- 注册驱动 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- mysql的用户名 -->
<property name="connection.username">root</property>
<!-- mysql的用户密码 -->
<property name="connection.password">123456</property>
<!-- 连接mysql的某库 -->
<property name="connection.url">jdbc:mysql://localhost:3306/user</property>
<!-- 控制台输出sql -->
<property name="show_sql">true</property>
<!-- 格式化输出的sql -->
<property name="format_sql">true</property>
<!-- 自动提交事务 -->
<!-- <property name="connection.autocommit">true</property> -->
<!-- 创建sql表
update:如果没有表,则创建一个。如果有表,而且表结构一致,那么不改变表。如果表结构不一样,会添加sql表缺少的列,多余的也不会删除。
create:不管sql表有没有存在,都会重新创建表。
create-drop:在create的基础上,每次关闭虚拟机时都会把表删除了。
validate:效验sql表,如果一致,则没有反应,如果不一致了,会抛出异常。
-->
<property name="hbm2ddl.auto">update</property>
<!-- 将Session与线程绑定=> 只有配置了该配置,才能使用getCurrentSession -->
<property name="current_session_context_class">thread</property>
<!-- 数据库方言配置 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 导入映射文件 -->
<mapping resource="com/xiaostudy/domain/Teacher.hbm.xml"/>
<mapping resource="com/xiaostudy/domain/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Test1.java
package com.xiaostudy.test; import org.hibernate.classic.Session; import com.xiaostudy.domain.Student;
import com.xiaostudy.domain.Teacher;
import com.xiaostudy.util.HibernateUtils; /**
* 测试多对多
*
* @author xiaostudy
*
*/
public class Test1 { public static void main(String[] args) {
//根据hibernate工具类,获取一个全新的Session
Session session = HibernateUtils.openSession();
//开始事务
session.beginTransaction();
Teacher teacher1 = new Teacher();
Teacher teacher2 = new Teacher();
teacher1.setName("t1");
teacher2.setName("t2"); Student student1 = new Student();
Student student2 = new Student();
student1.setName("s1");
student2.setName("s2"); //维护关系
teacher1.getStudents().add(student1);
teacher1.getStudents().add(student2);
teacher2.getStudents().add(student1);
teacher2.getStudents().add(student2); //持久化数据
session.save(teacher1);
session.save(teacher2); //关闭事务并提交事务
session.getTransaction().commit();
//关闭资源
session.close();
} }
码云:https://gitee.com/xiaostudy2/hibernate_manyToMany_demo/attach_files
hibernate的多对多配置的更多相关文章
- Hibernate annotation多对多配置
角色(用户组),用户多对多. 角色实体配置: private Set<TAuthUser> users; @ManyToMany @JoinTable(name="t_auth_ ...
- Hibernate框架笔记03表操作多对多配置
目录 1. 数据库表与表之间的关系 1.1 一对多关系 1.2 多对多关系 1.3 一对一关系[了解] 2. Hibernate的一对多关联映射 2.1 创建一个项目,引入相关jar包 2.2. 创建 ...
- hibernate映射xml文件配置之一对多,多对多
一对多配置 [1]班级和学生模型 --->班级可容纳多个学生 --->学生只能属于一个班级 [2]一对多配置中的关系维护(inverse) --->一端放弃关系的维护 ---> ...
- Hibernate知识点小结(三)-->一对多与多对多配置
一.多表关系与多表设计 1.多表关系 一对一: 表的设计原则(分表原则): 优化表的性能 基于语意化分表 ...
- hibernate关于多对多注解配置
Game实体类配置关系 @Entity @Table(name = "game") public class Game { @Id @GeneratedValue private ...
- hibernate中多对多关联
hibernate中多对多关联 “计应134(实验班) 凌豪” 在关系数据库中有一种常见的关系即多对多关系,例如课程和学生的关系,一个学生可以选择多门课程,同时一门课程也可以被多个学生选择, 因此课程 ...
- Hibernate的多对多映射关系
example: 老师(teacher)和学生(Student)就是一个多对多的关系吧?老师可以有多个学生,学生也可以由多个老师,那在Hibernate中多对多是怎样实现的呢?? 在Hibernate ...
- mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置
n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...
- Hibernate中多对多的annotation的写法(中间表可以有多个字段)
2011-07-04 6:52 一般情况下,多对多的关联关系是需要中间表的: 情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只 ...
随机推荐
- JZOJ.5236【NOIP2017模拟8.7】利普希茨
Description
- Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded.
EF6进行Insert操作的时候提示错误 Store update, insert, or delete statement affected an unexpected number of rows ...
- Android Log工具之Luffy
Luffy Luffy可以在手机端实时显示你App中的logcat输出.并且具有Log等级与Tag过滤功能.另外Luffy还支持收集Log,保存Log和查看本地log功能. 使用方法 1.Gradle ...
- delphi xe -芒果数据库(FDConnection,DataSource,FDMongoQuery,FDMongoDataSet)连接,查询(展示数据),这里有mongodb为例子
一.连接 1.FDConnection:创建一个临时连接定义 资料:http://www.cnblogs.com/zhenfei/p/4105515.html 连接芒果数据库:选则Mongo(芒果), ...
- 第四课(2)——mysql配置参数讲解
*****************general***************** user 启动mysql domain的用户 port 数据库端口号 socket 数据库socket文件的路径 p ...
- Oracle实例的恢复、介质恢复( crash recovery)( Media recovery)
实例的恢复( crash recovery) 什么时候发生Oracle实例恢复? shutdown abort; 数据库异常down掉(机器死机,掉电...) 实例恢复的原因是数据有丢掉,使用redo ...
- 剑指Offer——二维数组中的查找
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析: 因为二维数组 ...
- HTML里引号的输出与显示
关于输入框中显示双引号和单引号 前台显示解决办法: 方法一: 单引号<input type="text" value="'"> 双引号<inp ...
- Django HttpResponse对象详解
HttpResponse对象 Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数.那么视图函数在处理完相关的逻辑后,也需要返回一个响 ...
- Django的模型层(1)- 单表操作(上)
一.ORM简介 MTV或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的 ...