© 版权声明:本文为博主原创文章,转载请注明出处

说明:该实例是通过映射文件和注解两种方式实现的。可根据自己的需要选择合适的方式

实例:

1.项目结构

2.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.hibernate</groupId>
<artifactId>Hibernate-OneToMany</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.1.7.Final</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
</dependencies> </project>

3.Student.java

package org.hibernate.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; @Entity
public class Student { @Id
@GeneratedValue(generator="sid")
@GenericGenerator(name="sid", strategy="native")
private int sid;// 学号
@Column(length=100)
private String sname;// 姓名
@Column(length=2)
private String sex;// 性别 public Student() { } public Student(String sname, String sex) {
super();
this.sname = sname;
this.sex = sex;
} public int getSid() {
return sid;
} public void setSid(int sid) {
this.sid = sid;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} }

4.Grade.java

package org.hibernate.entity;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany; import org.hibernate.annotations.GenericGenerator; @Entity
public class Grade { @Id
@GeneratedValue(generator="gid")
@GenericGenerator(name="gid", strategy="native")
private int gid;// 班级号
@Column(length=100)
private String gname;// 班级名
private String gdesc;// 班级描述
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn(name="gid")
private Set<Student> students; public Grade() { } public Grade(String gname, String gdesc) {
super();
this.gname = gname;
this.gdesc = gdesc;
} public int getGid() {
return gid;
} public void setGid(int gid) {
this.gid = gid;
} public String getGname() {
return gname;
} public void setGname(String gname) {
this.gname = gname;
} public String getGdesc() {
return gdesc;
} public void setGdesc(String gdesc) {
this.gdesc = gdesc;
} public Set<Student> getStudents() {
return students;
} public void setStudents(Set<Student> students) {
this.students = students;
} }

5.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> <class name="org.hibernate.entity.Student" table="student">
<id name="sid" type="java.lang.Integer">
<column name="sid"/>
<generator class="native"/>
</id>
<property name="sname" type="java.lang.String">
<column name="sname" length="100"/>
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="2"/>
</property>
</class> </hibernate-mapping>

6.Grade.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> <class name="org.hibernate.entity.Grade" table="grade">
<id name="gid" type="java.lang.Integer">
<column name="gid"/>
<generator class="native"/>
</id>
<property name="gname" type="java.lang.String">
<column name="gname" length="100"/>
</property>
<property name="gdesc" type="java.lang.String">
<column name="gdesc"/>
</property>
<!-- 配置单向的一对多关联关系 -->
<set name="students" table="student" cascade="all">
<!-- 指定关联的外键列 -->
<key column="gid"/>
<one-to-many class="org.hibernate.entity.Student"/>
</set>
</class> </hibernate-mapping>

7.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> <!-- 配置SessionFactory -->
<session-factory>
<!-- 配置数据库连接信息 -->
<property name="connection.username">root</property>
<property name="connection.password">***</property>
<property name="connection.url">
jdbc:mysql:///hibernate?useSSL=true&amp;characterEncoding=UTF-8
</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- Hibernate常用属性 -->
<property name="hbm2ddl.auto">update</property><!-- 是否自动创建表结构 -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property><!-- 方言 -->
<property name="show_sql">true</property><!-- 是否显示SQL -->
<!-- 引入实体类 -->
<!-- <mapping class="org.hibernate.entity.Grade"/>
<mapping class="org.hibernate.entity.Student"/> -->
<!-- 引入映射文件 -->
<mapping resource="hbm/Student.hbm.xml"/>
<mapping resource="hbm/Grade.hbm.xml"/>
</session-factory> </hibernate-configuration>

8.TestOneToMany.java

package org.hibernate.test;

import java.util.HashSet;
import java.util.Set; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.entity.Grade;
import org.hibernate.entity.Student;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class TestOneToMany { private SessionFactory sessionFactory;
private Session session;
private Transaction transaction; @Before
public void before() { // 创建SessionFactory对象
sessionFactory = new Configuration().configure().buildSessionFactory();
// 创建Session对象
session = sessionFactory.openSession();
// 开启事务
transaction = session.beginTransaction(); } @After
public void after() { // 提交事务
transaction.commit();
// 关闭Session
session.close();
// 关闭SessionFactory
sessionFactory.close(); } @Test
public void testAdd() { Grade grade = new Grade("Java一班", "Java应用开发一班");
Student student1 = new Student("张三", "男");
Student student2 = new Student("李四", "男"); Set<Student> s = new HashSet<Student>();
s.add(student1);
s.add(student2); grade.setStudents(s); session.save(grade);
session.save(student1);
session.save(student2); } @Test
public void testQuery() { Grade grade = session.get(Grade.class, 1); System.out.println(grade.getGname() + " : " + grade.getGdesc());
for (Student s: grade.getStudents()) {
System.out.println(s.getSname() + " : " + s.getSex());
} } @Test
public void testUpdate() { Grade grade = new Grade("Java二班", "Java应用开发二班");
Student student = session.get(Student.class, 1); Set<Student> s = new HashSet<Student>();
s.add(student); grade.setStudents(s); session.save(grade); } @Test
public void testDelete() { Grade grade = session.get(Grade.class, 2);
session.delete(grade); } }

9.效果预览

  9.1 执行testAdd方法

  9.2 执行testQuery方法

  9.3 执行testUpdate方法

  9.4 执行testDelete方法

参考:http://www.imooc.com/video/7822

http://www.imooc.com/video/10091

Hibernate学习之单向一对多映射的更多相关文章

  1. Hibernate学习4—关联关系一对多映射

    一.班级学生一对多映射实现(单向) Class 1 * Student 一对多 在学生多的一方,配置一的对象:   com.cy.model.Class: package com.cy.model; ...

  2. Hibernate学习之双向一对多映射(双向多对一映射)

    © 版权声明:本文为博主原创文章,转载请注明出处 1.双向映射与单向映射 - 一对多单向映射:由一方(教室)维护映射关系,可以通过教室查询该教室下的学生信息,但是不能通过学生查询该学生所在教室信息: ...

  3. Hibernate学习4—关联关系一对多映射2

    第四节:班级学生一对多映射实现(双向) 查询班级的时候能够获取所有的学生:   在上一节的基础之上:我们在Class端也保存学生的关系: com.cy.model.Class: public clas ...

  4. Hibernate学习之单向多对一映射

    © 版权声明:本文为博主原创文章,转载请注明出处 说明:该实例是通过映射文件和注解两种方式实现的.可根据自己的需要选择合适的方式 实例: 1.项目结构 2.pom.xml <project xm ...

  5. Hibernate学习(二)关系映射----基于外键的单向一对一

    事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...

  6. hibernate笔记--单向一对多映射方法

    上一篇讲的是单向多对一的表关系,与单向一对多的关系正好相反,如下图所示关系: ,可以看出年级表和学生表是一对多的关系,一条年级信息对应多条学生信息,在hibernate中成为单向的一对多的映射关系,应 ...

  7. hibernate学习(二)

    hibernate 单向一对多映射 一.数据表设计 数据库名:hibernate5 数据表: ①表名:CUSTOMERS 字段: CUSTOMER_ID  CUSTOMER_NAME ②表名:ORDE ...

  8. hibernate多对一单向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  9. Hibernate学习之——搭建log4j日志环境

    昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...

随机推荐

  1. 扫面线+线段树(hdu1542)

    之前写过这个算法,时间长了就忘掉了,,现在不看书自己努力回想起来,对算法的理解,对线段树的理解感觉也更深了一点(可能心理作用,哈哈哈) 思路简单说一下吧 从做到右遍历每一条矩阵的边(左右边),看该边对 ...

  2. POJ 1044: Date bugs

    题目描述 There are rumors that there are a lot of computers having a problem with the year 2000. As they ...

  3. luogu P1494 岳麓山上打水

    题目描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. 信息组有一个容量为q升的大缸,由于 ...

  4. 远程debug---远程服务器参数设置

    java  -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=25 -jar  myboot.jar 或者  java ...

  5. 前端JavaScript实现跨域的方式(转)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  6. Ubuntu 16.04网络管理工具NetworkManager无法使用nm-tool的问题

    说明: 1.在Ubuntu中网络设置分两类,一个是GUI配置工具NetworkManager,另一个是命令行的配置,两者只能共存一个,也就是说其中一个设置之后另一个就会失效: 2.NetworkMan ...

  7. 当ASP.NET Forms验证方式遭遇苹果IOS

    一.问题出现 我在用ASP.NET MVC4做微信开发的时候,用Forms验证方式做为authentication. 一般都是在web.config加: <authentication mode ...

  8. 【Mybatis】mybatis查询报错org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'areaName' in 'class java.lang.String'

    mybatis查询报错: Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for pro ...

  9. N++ 道ASP.NET面试题

    InterviewQuestions-ASP.NET N++ 道ASP.NET面试题 1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . ...

  10. 新人补钙系列教程之:3D理论 - 二进制空间分割(BSP)树

    1. 什么是BSP树 BSP算法的初始数据是一个多边形集,BSP在预处理的时候先在多边形集中选取一个多边形作为支持平面,然后根据这个平面将集合划分成两个部分,每个部分是一个新的子节点,递归进行该过程, ...