`

hibernate一对多与多对多示例

阅读更多

文件清单:

文件名

描述

Student.java

学生信息类

Teacher.java

老师信息类

Clazz.java

班级信息类

Student.hbm.xml

学生信息对应映射文件

Teacher.hbm.xml

老师信息对应映射文件

Clazz.hbm.xml

班级信息对应映射文件

Hibernate.cfg.xml

Hibernate配置文件

HibernateUtil.java

Hibernate工具类

Test.java

测试类

 

 

Student.java

import java.util.Set;

 

publicclass Student {

privateintid;

private String name;

privateintage;

private Clazz clazz = null;

private Set<Teacher> teacs;

 

public Set<Teacher> getTeacs() {

returnteacs;

}

publicvoid setTeacs(Set<Teacher> teacs) {

this.teacs = teacs;

}

publicint getId() {

returnid;

}

publicvoid setId(int id) {

this.id = id;

}

public String getName() {

returnname;

}

publicvoid setName(String name) {

this.name = name;

}

publicint getAge() {

returnage;

}

publicvoid setAge(int age) {

this.age = age;

}

public Clazz getClazz() {

returnclazz;

}

publicvoid setClazz(Clazz clazz) {

this.clazz = clazz;

}

}

 

Teacher.java

import java.util.Set;

 

publicclass Teacher {

privateintid;

private String name;

private Set<Student> stus;

 

publicint getId() {

returnid;

}

publicvoid setId(int id) {

this.id = id;

}

public String getName() {

returnname;

}

publicvoid setName(String name) {

this.name = name;

}

public Set<Student> getStus() {

returnstus;

}

publicvoid setStus(Set<Student> stus) {

this.stus = stus;

}

}

 

Clazz.java

import java.util.Set;

 

publicclass Clazz {

privateintid;

private String name;

private Set<Student> stus;

 

publicint getId() {

returnid;

}

publicvoid setId(int id) {

this.id = id;

}

public String getName() {

returnname;

}

publicvoid setName(String name) {

this.name = name;

}

public Set<Student> getStus() {

returnstus;

}

publicvoid setStus(Set<Student> stus) {

this.stus = stus;

}

}

 

Student.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping

package="com.xfimti.hiberante.beans">

<class name="Student">

<id name="id" >

<generator class="native"></generator>

</id>

<property name="name"></property>

<property name="age"></property>

 

<many-to-one name="clazz" column="clazz_id"></many-to-one>

<set table="stu_tea" name="teacs">

<key column="student_id"></key>

<many-to-many class="Teacher" column="teacher_id"></many-to-many>

</set>

</class>

 

</hibernate-mapping>

 

Teacher.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping

package="com.xfimti.hiberante.beans">

<class name="Teacher">

<id name="id" >

<generator class="native"></generator>

</id>

<property name="name"></property>

 

<set table="stu_tea" name="stus">

<key column="teacher_id"></key>

<many-to-many class="Student" column="student_id"></many-to-many>

</set>

</class>

 

</hibernate-mapping>

 

 

Clazz.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping

package="com.xfimti.hiberante.beans">

<class name="Clazz">

<id name="id" >

<generator class="native"></generator>

</id>

<property name="name"></property>

<set name="stus" inverse="true">

<key column="clazz_id"></key>

<one-to-many class="Student"/>

</set>

</class>

 

</hibernate-mapping>

 

 

Hibernate.cg.xml

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<hibernate-configuration>

<session-factory name="foo">

<property name="show_sql">true</property>

<property name="hibernate.format_sql">false</property>

 

<property name="hibernate.hbm2ddl.auto">update</property>

 

<property name="hibernate.connection.driver_class">

com.mysql.jdbc.Driver

</property>

<property name="hibernate.connection.url">

jdbc:mysql:///test

</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">123</property>

<property name="hibernate.dialect">

org.hibernate.dialect.MySQLDialect

</property>

<mapping resource="com/xfimti/hiberante/beans/Student.hbm.xml" />

<mapping resource="com/xfimti/hiberante/beans/Clazz.hbm.xml" />

<mapping resource="com/xfimti/hiberante/beans/Teacher.hbm.xml" />

</session-factory>

</hibernate-configuration>

 

HibernateUtil.java

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

 

publicclass HibernateUtil {

privatestatic SessionFactory sessionFactory = null;

 

static {

try {

sessionFactory = new Configuration().configure().buildSessionFactory();

} catch (HibernateException e) {

System.err.println("Initial SessionFactory creation failed." + e);

e.printStackTrace();

}

}

 

publicstatic Session getSession() {

returnsessionFactory.openSession();

}

}

 

Test.java

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

 

import org.hibernate.HibernateException;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.Transaction;

 

import com.xfimti.hiberante.beans.Clazz;

import com.xfimti.hiberante.beans.Student;

import com.xfimti.hiberante.beans.Teacher;

import com.xfimti.hibernate.util.HibernateUtil;

 

publicclass Test {

 

publicstaticvoid main(String[] args) {

/*一对多示例。*/

/*List<Student> ss = getAllStudent(3);

System.out.println(ss.size());

Iterator<Student> its = ss.iterator();

while(its.hasNext()) {

Student s = its.next();

System.out.println(s.getName()+","+s.getAge());

}*/

 

/*多对多示例。*/

/*添加一个老师的信息。*/

/*Teacher t = new Teacher();

t.setName("teacher1");

addTeacher(t);*/

 

/*添加一个班级信息。*/

/*Clazz clazz = new Clazz();

clazz.setName("xxxxxx");

addClazz(clazz);*/

 

/*添加一个学生信息。他的老师是teacher1,所在班级为xxxxxx*/

Student s = new Student();

s.setName("yyyyyy");

String clazzName = "xxxxxx";

String teacherName = "teacher1";

addStudent(s, clazzName, teacherName);

}

 

/**根据班级名称查询出班级信息。*/

publicstatic Clazz getClazz(String name) {

Clazz clazz = null;

Session s = HibernateUtil.getSession();

Query q = s.createQuery("from Clazz as c where c.name=?");

q.setString(0, name);

clazz = (Clazz) q.uniqueResult();

if(s != null) {

s.close();

}

return clazz;

}

 

/**添加学生信息。*/

publicstaticvoid addStudent(Student stu,String clazzName) {

Session session = null;

Transaction tx = null;

 

try {

session = HibernateUtil.getSession();

tx = session.beginTransaction();

session.saveOrUpdate(stu);

Clazz clazz = getClazz(clazzName);

stu.setClazz(clazz);

tx.commit();

} catch (HibernateException e) {

if(tx != null) {

tx.rollback();

}

e.printStackTrace();

}

finally{

if(session != null) {

session.close();

}

}

}

 

/**添加班级信息。*/

publicstaticvoid addClazz(Clazz clazz) {

Session session = null;

Transaction tx = null;

 

try {

session = HibernateUtil.getSession();

tx = session.beginTransaction();

session.save(clazz);

tx.commit();

} catch (HibernateException e) {

if(tx != null) {

tx.rollback();

}

e.printStackTrace();

}

finally{

if(session != null) {

session.close();

}

}

}

 

/**通过班级编号,查询出该班级所有的学生信息。*/

publicstatic List<Student> getAllStudent(int clazz_id) {

List<Student> ss = new ArrayList<Student>();

Session s = HibernateUtil.getSession();

Clazz clazz = (Clazz) s.get(Clazz.class, 3);

for (int i = 0; i < clazz.getStus().size(); i++) {

ss.add((Student)clazz.getStus().toArray()[i]);

}

return ss;

}

 

/**添加老师信息*/

publicstaticvoid addTeacher(Teacher t) {

Session session = null;

Transaction tx = null;

 

try {

session = HibernateUtil.getSession();

tx = session.beginTransaction();

session.save(t);

tx.commit();

} catch (HibernateException e) {

if(tx != null) {

tx.rollback();

}

e.printStackTrace();

}

finally{

if(session != null) {

session.close();

}

}

}

 

/**添加学生信息。多对多*/

publicstaticvoid addStudent(Student s,String clazzName,String teacherName) {

Session ss = null;

Transaction tx = null;

try {

ss = HibernateUtil.getSession();

tx = ss.beginTransaction();

ss.save(s);

/*根据班级名称查出班级信息。*/

Query q = (Query) ss.createQuery("from Clazz where name=?");

q.setString(0, clazzName);

Clazz clazz = (Clazz) q.uniqueResult();

q = null;

/*根据老师姓名查出老师信息。*/

q = ss.createQuery("from Teacher where name=?");

q.setString(0, teacherName);

Teacher t = (Teacher) q.uniqueResult();

s.setClazz(clazz);

/*clazzt设置到s,在处理持久化状态自动检测更改并修改。*/

Set<Teacher> st = new HashSet<Teacher>();

st.add(t);

s.setTeacs(st);

tx.commit();

} catch (HibernateException e) {

if(tx != null) {

tx.rollback();

}

e.printStackTrace();

}finally {

if(ss != null) {

ss.close();

}

}

}

 

}

分享到:
评论

相关推荐

    hibernate实例(一对多,多对一)

    以上就是关于Hibernate中一对一和一对多关联关系的基本知识及其配置示例。理解和熟练应用这些关联关系是提高Java应用程序数据库操作效率的关键。在使用Hibernate时,要灵活运用各种特性,以适应不同场景的需求,同时...

    hibernate一对多实例

    描述中的链接指向了一篇由“fangguanhong”在iteye博客上发表的文章,虽然具体内容没有提供,但我们可以根据标题推测该文章可能详细讲解了一个具体的Hibernate一对多关系的实现步骤和示例代码。 在Java的Hibernate...

    hibernate一对多单项映射示例

    hibernate一对多单项映射示例

    hibernate一对多、多对一、一对一、多对多配置实例

    本文将深入探讨Hibernate中的一对多、多对一、一对一以及多对多四种关系映射的配置实例,帮助开发者更好地理解和运用这些关系。 ### 一对多关系(One-to-Many) 在数据库设计中,一对多关系是最常见的一种关联,...

    Hibernate多对多关联添加及查询示例

    本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...

    hibernate一对多,多对一,一对多双向关联

    “Hibernate 一对多,多对一,一对多双向关联”是指在Java持久化框架Hibernate中,实体间常见的三种关联关系。在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户...

    Hibernate的多对一和一对多操作实例

    本文将深入探讨Hibernate框架下“多对一”和“一对多”的关联关系,并通过一个具体示例来阐述其操作流程与实现细节。 ### Hibernate中的“多对一”和“一对多” 在数据库设计中,“多对一”(Many-to-One)和“一...

    Hibernate学习代码示例

    此外,还会有“一对多”和“多对多”的关系映射示例。在数据库中,这两个关系很常见,例如,一个学生可以有多门课程(一对多),而一门课程也可以被多个学生选修(多对多)。 “一对多”关系映射,通常在实体类中...

    hibernate(一对多,多对一映射)操作

    本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一个实际的demo演示它们在增删查改操作中的应用。 首先,我们要理解什么是数据库的关联关系。在数据库设计中,我们经常遇到一种情况,即一个实体可能与...

    hibernate完整小示例

    - **关联映射**: Hibernate 支持一对一、一对多、多对一、多对多等多种关联映射。 ### 总结 "hibernate完整小示例"是一个基础的教程,涵盖了配置、实体类、持久化操作和查询等关键点。通过这个示例,开发者能够...

    Hibernate ORM - 一对多双向关联关系

    这个压缩包文件“HibernateORM”很可能包含了关于如何在实际项目中设置和使用Hibernate一对多双向关联的示例代码、配置文件或者详细教程。通过学习这些材料,开发者能够深入理解如何在Java应用中利用Hibernate来处理...

    hibernate一对多双项映射示例

    本文将深入探讨“hibernate一对多双项映射”的概念,并通过一个示例来演示如何实现这一关系。这个示例中包含了数据库的DDL(Data Definition Language),意味着我们将看到创建表的SQL语句。 首先,一对多关系指的...

    Hibernate 注解一对多,多对一

    与一对多相反,多对一关系表示一个实体可以与多个其他实体相关联,例如每个员工属于一个部门。在Hibernate中,我们使用`@ManyToOne`注解来表达这种关系。同样,这个注解也有几个关键属性: 1. `targetEntity`:指定...

    hibernate多对多

    总结,Hibernate的多对多关系映射是数据库设计中非常重要的一个部分,它简化了Java对象与数据库表之间的交互。通过理解并实践案例,我们可以更深入地掌握这一特性,提高开发效率。在实际项目中,根据业务需求,合理...

    Hibernate双向一对多

    标题"Hibernate双向一对多"指的是Hibernate框架中的一个重要关系映射概念,即在一个实体类中,一个实例可以与多个另一个实体类的实例相关联,而在另一个实体类中,每个实例也可以关联到该实体类的一个实例。...

    CH4Hibernate2,一对多,多对一,多对多实现增删改查

    `CH4Hibernate2`项目专注于使用Hibernate框架实现数据库中的一对多、多对一和多对多关系的增删改查操作。Hibernate作为Java领域中最流行的ORM(对象关系映射)框架,能够简化数据库操作,将SQL语句与Java代码分离,...

    JavaEE Hibernate多对多简单示例

    让我们深入了解一下这个简单的Hibernate多对多示例。 首先,我们需要定义两个实体类,例如`Student`和`Course`。在Hibernate中,这些类需要继承自`Serializable`接口,并使用`@Entity`注解标识为数据库表的对应类。...

    Hibernate 一对一,一对多,多对多例子

    - Hibernate_1to_many_2:这是关于一对多关联的示例,一个实体可以与多个其他实体相关联,例如一个部门可以有多个员工。 - Hibernate_1to1_pk2:这可能涉及使用主键外键实现一对一关联的示例。 - Hibernate_1to_many...

    Hibernate一对多 多对一实例

    总之,Hibernate的一对一、一对多和多对多关系映射是Java开发中的重要概念,它们为对象模型提供了与数据库模型之间的桥梁。通过对这些关系的理解和实践,你可以更好地掌握Hibernate框架,从而在项目开发中发挥出更大...

Global site tag (gtag.js) - Google Analytics