© 版权声明:本文为博主原创文章,转载请注明出处
说明:该实例是通过映射文件和注解两种方式实现的。可根据自己的需要选择合适的方式
实例:
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&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方法

