SSH学习五 Hibernate one to many assiciation

一对多关系

one的一方使用Set保存它所对应的many的一方的多个数据。使用set因为数据库记录也是没有重复的,Set当然也是没有重复的。

Hibernate有一个有趣的地方,可以查询得到类,然后做修改,最后session.beginTransaction().commit();就能自动把对类的更新固化到数据库。

当然查询就不必开始事务。

另外,级联删除只需要在one的一方的mapping文件加上cascade="all" 详见下面的配置文件

下面贴几个重要文件:

1、Teacher.java

package com.learn.po;

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

import org.hibernate.Session;

import com.learn.dao.HibernateUtil;

public class Teacher {
	private int teacherid;
	private String nm;
	private Set<Student> sss = new HashSet<Student>();
	public String getNm() {
		return nm;
	}
	public Set<Student> getSss() {
		return sss;
	}
	public void setSss(Set<Student> sss) {
		this.sss = sss;
	}
	public void setNm(String nm) {
		this.nm = nm;
	}
	public int getTeacherid() {
		return teacherid;
	}
	public void setTeacherid(int teacherid) {
		this.teacherid = teacherid;
	}

	public static void getQuery1(){
		Session session = HibernateUtil.getSessionFactory().openSession();
		/*仅仅对Teacher查询还没有查Teacher对应的Student*/
		Teacher t = (Teacher)session.get(Teacher.class, 3);
		System.out.println(t.getNm());
		/*以下涉及了多的一方 所以加上一次对Sudent的查询并存到set*/
		System.out.println(t.getSss().size());
		Set<Student>ss = t.getSss();
		for (Iterator iterator = ss.iterator(); iterator.hasNext();) {
			Student student = (Student) iterator.next();
			System.out.println(student.getNm());

		}
		session.close();
	}

	public static void changeTeacher(){

		Session session = HibernateUtil.getSessionFactory().openSession();
		Teacher t1 = (Teacher) session.get(Teacher.class, 1);
		Teacher t2 = (Teacher) session.get(Teacher.class, 2);
		Student s = (Student) session.get(Student.class, 4);
		//System.out.println(s.getNm());
		t2.getSss().remove(s);
		t1.getSss().add(s);

		session.beginTransaction().commit();

	}

	public static void deleteCascade(){
		/*先删除该老师的所有学生,再删除这个老师*/
		//因为在配置文件里面cascade="all"所以可以级联删除
		Session session = HibernateUtil.getSessionFactory().openSession();
		Teacher t1 = (Teacher) session.get(Teacher.class, 1);
		session.delete(t1);
		session.beginTransaction().commit();
	}

	public static void  main(String args[]){

		//getQuery1();
		//changeTeacher();
		//deleteCascade();
	}

}

2、Teacher映射文件

<?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.learn.po">

	<class name="Teacher" table="teacher" lazy="true">
		<id name="teacherid">
			<generator class="identity"></generator>
		</id>
		<property name="nm"></property>
		<set name="sss" cascade="all">
			<!-- 这里的key表示作为外键的属性,如果该表的多个属性都是作为外键,那么下面多个key -->
			<key column="teacherid"></key>
			<!-- 这里的class是 多 的一方 -->
			<one-to-many class="Student" />
		</set>
	</class>
</hibernate-mapping>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 15:56:32

SSH学习五 Hibernate one to many assiciation的相关文章

SSH学习四 Hibernate多对一的关系 + 增删改查

多对一关系实现起来不难,只需要在"多"的一方声明外键,声明外键在类的映射文件实现. 下面以老师学生为例,老师是1,学生是多 有一个有趣的地方,在Student类里面,没有声明teacherid这个属性,但是只要在配置文件声明了外键,那么就算类里面没有外键,配置文件的property也没有teacherid 下面是几个关键文件: 1.Student类(包含Student的增删改查) package com.learn.po; import org.hibernate.Session; i

SSH学习之Hibernate session的方法全集

我只是知识的搬运工.  转载地址:http://www.cnblogs.com/lukun/archive/2011/03/31/1968937.html#top 原文中有更详细的表格,我在此谨做记录,因为博客中表格排版很难弄,重复修改好几次依然如此,就把表格部分删除了,可以去原文查看. Method Detail 方法详细 getEntityMode  EntityMode getEntityMode () 检索在本次方法的影响的实体模式. Returns: 返回值 本类方法的实体模式. ge

SSH学习六 Hibernate 一对多 多对一的双向映射

其实就是前面两个的结合 Student里面有Teacher类作为成员,映射文件加上对teacherid的外键参照 Teacher里面有Student的Set,映射文件有set标签,里面声明one-to-many以及key 结合http://blog.csdn.net/u011026968/article/details/47154059 http://blog.csdn.net/u011026968/article/details/47156979 即可 版权声明:本文为博主原创文章,未经博主允

hibernate学习五 Hibernate补充

1  MiddleGenIDE可以生成映射类和映射文件. 2 原文地址:https://www.cnblogs.com/liufei1983/p/8635468.html

Java SSH (strusts2+spring+hibernate )完结项目源码 mysql

Java SSH (strusts2+spring+hibernate ) 完结项目源码 mysql 用来学习 毕业设计都可 继续二次开发也行 提供文档 数据结构 下载地址: 联系QQ 313596790

SSH框架之Hibernate数据库外键如何插入值的问题

SSH框架之Hibernate数据库外键如何插入值的问题 一.目标: 现有表: 其中Tea_id属于外键,如何向含有外键的表中插入对应的数据. 二.pojos部分 Course_information .java package com.pojos; import java.util.Date; public class Course_information { private Integer Course_id; private String Course_name; private Inte

SSH学习

SSH 学习笔记 SSH:struts + hibernate + spring 第一部分:struts2 (没有数据库) struts2 简介 servlet解耦,实现了MVC的思想: struts2 配置文件的标签 package name:唯一标识一个包,不能重名: extends:继承其他包,可以直接使用该包中的资源: abstract:true 包为抽象包,不能写action标签.默认为false: namespace:命名空间,注意搜索机制,默认namespace="/":

SSH(Struts2+Spring+Hibernate)框架搭建流程&lt;注解的方式创建Bean&gt;

此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblogs.com/wkrbky/p/5912810.html 一.Hibernate(数据层)的搭建: 实现流程 二.Spring(注入实例)的使用: 实现流程 三.Struts2(MVC)的搭建: 实现流程 这里注意一点问题: Struts2与Hibernate在一起搭建,antlr包,有冲突.MyE

SSH学习之二 OpenSSH配置文件解析

下面是对SSH配置文件的一些选项的分解说明,ssh_config是OpenSSH客户端的配置文件,sshd_config是OpenSSH服务器端的配置文件. ssh_config的内容如下: # This is the ssh client system-wide configuration file.  See ssh_config(5) for more information.  This file provides defaults for users, and the values c