Hibernate关联关系映射_单边一对多
2012-06-21 12:14
260 查看
业务需求:要求查询某个班级的所有学生
实体:班级类持有学生类的集合引用(省略setter getter 方法)
映射文件
Classes.hbm.xml
Student.hbm.xml
表结构
mysql> desc t_classes;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
mysql> desc t_student;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| classesid | int(11) | YES | MUL | NULL | |
+-----------+--------------+------+-----+---------+----------------+
测试方法
测试结果:
create table t_classes (id integer not null auto_increment, name varchar(255), primary key (id))
create table t_student (id integer not null auto_increment, name varchar(255), classesid integer, primary key (id))
alter table t_student add index FK4B90757085E257E4 (classesid), add constraint FK4B90757085E257E4 foreign key (classesid) references t_classes (id)
schema update complete
Hibernate: insert into t_student (name) values (?)
Hibernate: insert into t_student (name) values (?)
Hibernate: insert into t_classes (name) values (?)
Hibernate: update t_student set classesid=? where id=?
Hibernate: update t_student set classesid=? where id=?
实体:班级类持有学生类的集合引用(省略setter getter 方法)
public class Student { private int id; private String name; } public class Classes { private Integer id; private String name; private Set<Student> students; }
映射文件
Classes.hbm.xml
<hibernate-mapping package="cn.edu.bzu.hibernate.entity"> <class name="Classes" table="t_classes"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!-- 这个标签描述set集合引用 --> <set name="students"> <!-- key配置外键字段,代码会在student 表(多的一方)中添加外键--> <key column="classesid"/> <!-- one-to-many配置 --> <one-to-many class="Student"/> </set> </class> </hibernate-mapping>
Student.hbm.xml
<hibernate-mapping> <class name="cn.edu.bzu.hibernate.entity.Student" table="t_student"> <id name="id"> <generator class="native" /> </id> <property name="name" /> </class> </hibernate-mapping>
表结构
mysql> desc t_classes;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
mysql> desc t_student;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| classesid | int(11) | YES | MUL | NULL | |
+-----------+--------------+------+-----+---------+----------------+
测试方法
@Test public void testSave1() { Session session = null; try { session = HibernateSessionFactory.getSession(); session.beginTransaction(); Student student1 = new Student(); student1.setName("test"); Student student2 = new Student(); student2.setName("testj"); Set<Student> students = new HashSet<Student>(); students.add(student1); students.add(student2); Classes classes = new Classes(); classes.setName("yryd"); classes.setStudents(students); session.save(student1); session.save(student2); session.save(classes); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } finally { HibernateSessionFactory.closeSession(); }
测试结果:
create table t_classes (id integer not null auto_increment, name varchar(255), primary key (id))
create table t_student (id integer not null auto_increment, name varchar(255), classesid integer, primary key (id))
alter table t_student add index FK4B90757085E257E4 (classesid), add constraint FK4B90757085E257E4 foreign key (classesid) references t_classes (id)
schema update complete
Hibernate: insert into t_student (name) values (?)
Hibernate: insert into t_student (name) values (?)
Hibernate: insert into t_classes (name) values (?)
Hibernate: update t_student set classesid=? where id=?
Hibernate: update t_student set classesid=? where id=?
相关文章推荐
- Hibernate关联关系映射_单边多对一
- Hibernate关联关系映射之一对一(主键关联)
- 【Hibernate】--关联关系映射:继承映射
- Hibernate(六)实现一对多、多对一映射关联关系
- Hibernate 映射多对多关联关系
- Hibernate,JPA 对象关系映射之关联关系映射策略
- Hibernate学习---关联关系映射
- Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系
- Hibernate关联关系映射(单向一对多、单向多对一、双向一对多)
- Hibernate 映射一对一关联关系
- Hibernate的关联关系映射
- Hibernate关联关系映射之一对多关联关系
- 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及加入、查询
- 码农小汪-Hibernate学习4-关联关系映射many-to-one,many-to-one,one-to-many
- hibernate 关联映射:多对一(一对多)双向关联关系
- Hibernate注解方式一对多自关联关系映射
- 攻城狮在路上(壹) Hibernate(五)--- 映射一对多关联关系
- Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
- hibernate教程--关联关系的映射详解
- Hibernate关联关系映射-----基于连接表的单向多对多映射配置