`

hibernate学习之m:m映射

阅读更多
1、包结构:


2、源代码:
Course.java
package domain;

import java.util.HashSet;
import java.util.Set;

public class Course {
	private String id;
	private String cid;
	private String course;
	private Set<Student> students=new HashSet<Student>();

	public Course() {
	}

	public Course(String cid, String course) {
		this.cid = cid;
		this.course = course;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getCid() {
		return cid;
	}

	public void setCid(String cid) {
		this.cid = cid;
	}

	public String getCourse() {
		return course;
	}

	public void setCourse(String course) {
		this.course = course;
	}

	public Set<Student> getStudents() {
		return students;
	}

	public void setStudents(Set<Student> students) {
		this.students = students;
	}
	
}

Student.java:
package domain;

import java.util.HashSet;
import java.util.Set;

public class Student {
	private String id;
	private String sid;
	private String name;
	private Set<Course> courses=new HashSet<Course>();
	public Student(){};
	public Student(String sid,String name){
		this.sid=sid;
		this.name=name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getSid() {
		return sid;
	}
	public void setSid(String sid) {
		this.sid = sid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Set<Course> getCourses() {
		return courses;
	}
	public void setCourses(Set<Course> courses) {
		this.courses = courses;
	}
	
}

HbnUtil.java:
package util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HbnUtil {
	private static SessionFactory sessionFactory;
	private HbnUtil(){}
	public static synchronized SessionFactory getSessionFactory(){
		if(sessionFactory==null){
			sessionFactory=new Configuration().configure().buildSessionFactory();
		}
		return sessionFactory;
	}
}

hibernate.cfg.xml:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
        <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:myorcl</property>
        <property name="connection.username">myorcl</property>
        <property name="connection.password">embed</property>
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="myeclipse.connection.profile">myorcl</property>
    	<!--<property name="hibernate.connection.release_mode">AFTER_TRANSACTION</property>
    	-->
    	<property name="show_sql">true</property>
    	<mapping resource="domain/Student.hbm.xml"/>
    	<mapping resource="domain/Course.hbm.xml"/>
    </session-factory>

</hibernate-configuration>

Course.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="domain">
	<class name="Course" table="COURSE">
		<id name="id" column="id">
			<generator class="uuid"></generator>
		</id>
		<property name="cid" column="cid"></property>
		<property name="course" column="course"></property>
		<set name="students" table="SC" inverse="true">
			<key column="CFK"></key>
			<many-to-many class="Student" column="SFK"></many-to-many>
		</set>
	</class>
</hibernate-mapping>

Student.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="domain">
	<class name="Student" table="STUDENT">
		<id name="id" column="ID">
			<generator class="uuid"></generator>
		</id>
		<property name="sid" column="SID"></property>
		<property name="name" column="NAME"></property>
		<set name="courses" table="SC" cascade="all">
			<key column="SFK"></key>
			<many-to-many class="Course" column="CFK"></many-to-many>
		</set>
	</class>
</hibernate-mapping>

Test.java:
package test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import util.HbnUtil;
import domain.Course;
import domain.Student;


public class Test {
	public static void main(String[] args){
		SessionFactory sf=HbnUtil.getSessionFactory();
		Session session=sf.openSession();
		session.beginTransaction();
		
		Student s1=new Student("sid4","li");
		Course c1=new Course("cid4","C++");
		Student s2=new Student("sid5","li");
		Course c2=new Course("cid5","C++");
		
		s1.getCourses().add(c1);
		s1.getCourses().add(c2);
		c2.getStudents().add(s2);
		
		//session.save(s1);
		//session.save(c1);
		//session.save(c2);
		//session.save(s2);
		Object obj=session.get(Student.class, "4028e4282e091aa1012e091aa5420001");
		session.delete(obj);
		session.flush();
		
		session.getTransaction().commit();
		session.close();
		sf.close();
	}
}


以上代码使用中间表SC实现了多对多关系映射,但我还有一个疑问:就是如果中间表SC还想加入一个score(学生分数)字段,该如何处理呢?网上有人说将多对多映射拆成两个一对多映射。大家都是这么做的么?
  • 大小: 9 KB
分享到:
评论

相关推荐

    Hibernate基础学习源码

    本资源“Hibernate基础学习源码”提供了五个不同阶段的学习示例,分别命名为Hibernate_01至Hibernate_04以及Hibernate_M2M,涵盖了Hibernate的基本概念、配置、实体映射、CRUD操作以及多对多关系的处理。 1. **...

    hibernate表的映射关系总结

    hibernate表映射一直记不住,这次总结一下,放便下次使用。。。

    《精通Hibernate》学习-对象关系映射基础.zip

    《精通Hibernate》学习-对象关系映射基础 Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种方便地将数据库操作转换为面向对象的方式。在这个压缩包中,我们很可能会找到关于Hibernate基础...

    hibernate映射主键生成策略native

    ### Hibernate映射主键生成策略native #### 一、引言 在ORM(对象关系映射)技术中,Hibernate作为一款流行的Java持久层框架,在处理数据持久化方面提供了丰富的功能和灵活性。其中,主键生成策略是Hibernate配置...

    Hibernate3 学习笔记.ppt

    【一、O/R Mapping】 O/R Mapping,即对象关系映射,是将对象模型与关系数据库之间进行映射的技术。在Hibernate中,O/R Mapping允许开发者以面向对象的方式...学习和掌握Hibernate有助于提升Java应用的数据管理能力。

    Beginning-Hibernate-2nd-Edition.pdf

    本书是 Hibernate 相关技术领域的重要参考资料之一,对于想要深入了解 Hibernate 并在实际项目中应用该技术的开发者来说非常有价值。 #### 三、Hibernate 概述 Hibernate 是一个开放源代码的对象关系映射(ORM)...

    .hibernate 框架介绍

    Hibernate支持1:1、1:n、n:m等多种关联映射关系,可以有效地管理复杂的数据关系。 在Hibernate框架中,ORM模型简化了数据库查询的过程,开发者可以利用ORM框架提供的查询接口,以对象的方式操作数据,而无需深入...

    HIbernate 教程 资料 培训 学习

    此外,还包括1:1、1:n、n:m的关系映射,以及类表继承等复杂情况。 **二、Hibernate入门** Hibernate是一个优秀的ORM框架,具有开源、成熟、流行的特点,广泛应用于企业级开发。其优势在于提供自定义API,且被JBoss...

    Hibernate框架笔记

    这一过程涉及了对象(O)、关系型数据库表(R)以及映射(M)三个关键组成部分。 ### 持久化过程详解 在Java中实现持久化通常涉及到以下几个步骤: 1. **定义实体类**:如示例中的`Users`类,它包含了多个属性...

    Hibernate 简单 PPT 总结

    - "2018-7-24-Hibernate-配置表关系.pptx"和"06-2018-7-9-Hibernate-对象关系映射文件.pptx"可能分别讲解了如何配置实体间的关联关系和编写ORM映射文件。 - "01-2018-7-7-Hibernate.pptx"可能是Hibernate基础概念和...

    hibernate5.2.9

    Hibernate是Java领域中一款著名的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来操作数据库。在Hibernate 5.2.9版本中,提供了许多增强的功能和优化,适合初学者进行学习和实践。这个压缩包包含的...

    hibernate培训ppt

    【hibernate培训ppt】这份53页的资料主要涵盖了对象/关系映射(O/R Mapping)的概念,以及Hibernate框架的入门、映射声明、对象状态与生命周期、查询及最佳实践等内容。对于有一定Java、SQL和JDBC基础,且熟悉面向...

    开始学习Hibernate

    ### 开始学习Hibernate #### Hibernate简介与配置 Hibernate是一个开源的对象关系映射(Object-Relational Mapping,简称ORM)框架,用于Java应用中简化数据库操作。通过将对象模型与关系型数据库模型之间的转换...

    maven项目hibernate demo

    在本项目"maven项目...这个项目实例为初学者提供了一个学习Maven和Hibernate的实践平台,同时也适用于有一定经验的开发者参考和复用。通过这个demo,你可以深入了解Java Web应用的开发流程和现代ORM框架的使用方法。

    hibernate中的相关组件的介绍

    映射文件是Hibernate中用来定义实体类和数据库表之间映射关系的文件,通常采用XML格式,扩展名为`.hbm.xml`。这些映射文件对于Hibernate正确地将POJO实例转换为数据库中的记录至关重要。 **映射文件的主要内容包括...

    hibernate

    - **学习和使用的难度**:Hibernate的学习曲线相对平缓,一旦掌握基本概念后,使用起来相对简单。 - **代码侵入性**:Hibernate对代码的侵入性较小,可以通过注解或XML配置文件进行数据映射,而无需在业务逻辑中嵌入...

    hibernate-release-5.3.7.Final

    标题中的"hibernate-release-5.3.7.Final"指的是Hibernate ORM框架的一个特定版本,这是Java领域中广泛使用的对象关系映射(ORM)工具。Hibernate允许开发人员使用面向对象的方式来操作数据库,极大地简化了Java应用...

Global site tag (gtag.js) - Google Analytics