Hibernate关联关系映射_单边一对多

业务需求:要求查询某个班级的所有学生

实体:班级类持有学生类的集合引用(省略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=?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值