Hibenrate之多对多关联

Hibernate多对多关联可以分成单向和双向,多对多关系会借助中间表来保存映射信息,所以一般少用;

  • 单向

实例:学生可以在多个学校就读过,多个学校也会有多个学生;

TStudent:

public class TStudent implements java.io.Serializable {
	private static final long serialVersionUID = 1L;

	private Integer stuId;
	private String name;
	private Set<TSchool> tschool;
        get()/set()

 TStudent.hbm.xml:

<hibernate-mapping package="com.keith.many2many">
	<class name="TStudent" table="TStudent">
		<id name="stuId">
			<generator class="native"/>
		</id>
	
		<property name="name" />
		
		<set name="tschool" table="stu_school_link" cascade="all">
			<key column="stuId"/>
			<many-to-many class="TSchool" column="schoolId"/>
		</set>
	</class>	
</hibernate-mapping>

 TSchool:

public class TSchool implements java.io.Serializable {
	private static final long serialVersionUID = 1L;

	private Integer schoolId;
	private String name;
        get()/set()
}

 TSchool.hbm.xml:

<hibernate-mapping package="com.keith.many2many">
	<class name="TSchool" table="TSchool">
		<id name="schoolId">
			<generator class="native"/>
		</id>
		<property name="name" />
	</class>	
</hibernate-mapping>

 测试:

//添加数据
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();

		TStudent student = new TStudent();
		student.setName("柯");

		Set<TSchool> schools = new HashSet<TSchool>();
		TSchool school = new TSchool();
		school.setName("小学");
		TSchool school1 = new TSchool();
		school1.setName("中学");
		TSchool school2 = new TSchool();
		school2.setName("大学");

		schools.add(school);
		schools.add(school1);
		schools.add(school2);
		student.setTschool(schools);
		
		session.save(student);
		session.getTransaction().commit();

//查询数据
		TStudent stu = (TStudent) session.load(TStudent.class, 1);
		System.out.println("student's Name:" + stu.getName());

		Iterator<TSchool> it = stu.getTschool().iterator();
		TSchool school = null;
		while (it.hasNext()) {
			school = it.next();
			System.out.println("student's school Name"+school.getName());
		}
  •  双向,在TSchool一方加入TStudent对象;

TSchool:

public class TSchool implements java.io.Serializable {
	private static final long serialVersionUID = 1L;

	private Integer schoolId;
	private String name;
	private Set<TStudent> stus = new HashSet();
        get()/set()
}

 TSchool.hbm.xml:

<hibernate-mapping package="com.keith.many2many.doubleSide">
	<class name="TSchool" table="TSchool">
		<id name="schoolId">
			<generator class="native"/>
		</id>
	
		<property name="name" />
		<set name="stus" table="stu_school_link" cascade="save-update">
			<key column="schoolId"/>
			<many-to-many column="stuId" class="TStudent"/>
		</set>
	</class>	
</hibernate-mapping>

 TStudent:

public class TStudent implements java.io.Serializable {
	private static final long serialVersionUID = 1L;

	private Integer stuId;
	private String name;
	private Set<TSchool> tschool;
        get()/set();
}
 

TStudent.hbm.xml:

<hibernate-mapping package="com.keith.many2many.doubleSide">
	<class name="TStudent" table="TStudent">
		<id name="stuId">
			<generator class="native"/>
		</id>
	
		<property name="name" />
		
		<set name="tschool" table="stu_school_link" cascade="save-update">
		<!-- "stuId":连接表中关联当前实体类的列名 -->
			<key column="stuId"/>
			<!-- "schoolId":是连接表中关联本实体类的外键 -->
			<many-to-many class="TSchool" column="schoolId"/>
		</set>
	</class>	
</hibernate-mapping>

 附上测试类;

 

RU.EXE实用指南:从基础操作到高级调试技巧 本文是RU.EXE(RW Everything)的实用指南,详细介绍了这款硬件调试工具从基础操作到高级技巧的全过程。文章阐述了RU.EXE作为直接读写硬件寄存器、内存和PCI配置空间的强大工具,如何帮助硬件工程师和开发人员高效进行底层系统调试与故障排查,并强调了安全操作的重要性。 阅读详情

相关推荐

ISO 26262道路车辆功能安全.pdf

ISO 26262道路车辆功能安全.pdf

hibernate的基础学习--多对多关联

多对多采用学生老师模型进行测试 学生配置文件: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www...

diaochifu3136的博客 145

遗传算法优化反向传播神经网络Matlab代码.rar

遗传算法优化反向传播神经网络Matlab代码.rar

关于hibernate一对多,多对一,多对多的详细解析

hibernate中,这些映射关系是通过配置文件和实体类实现的。 多对一: <many-to-one name="dept" class="com.web.bean.Dept" column="deptno"></many-to-one> 在多个雇员对应同一个部门中,首先在雇员类中有部门类的对象作为雇员类的属性,name的值与字段值一致,然后给出雇员类的地址,最后通过...

Mark_able 312

Hibenate的单向关联映射(注解版)

一:单向1-1关联 以老夫老妻为例子来说明一下,在中国以前是以丈夫主导地位,所以我这里以t_husband作为主表,t_wife作为从表 1.1:无连接表的 (1)首先创建实体类,然后使用注解表示出来两者的关联关系 import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence....

qq_38777614的博客 296

hibernate 单向关联&双向关联

多对一: 就是A表中的一个字段是B表的主键。多个A表中的数据可以对应一个B表中的数据,同理,一个B表中的数据可以同时对应多个A表中的数据。   单向关联与双向关联对数据表的要求其实是一致的。满足对应的关联要求即可,也就是A表中的一个字段是B表中的主键。 单向关联与双向关联的需求是不一样的。单向关联,只需要可以通过主表找到控表即可。这个很简单,通过简单的sql语句,select B from...

qq_23835497的博客 646

Hibernate 映射多对多关联关系

多对多持久化类和映射文件的搭建1.创建持久化类1.创建Student类package cn.itcast.hibernate0909.manytomany;import java.io.Serializable; import java.util.Set;public class Student implements Serializable{ private Long sid; p

C. 2956

Hibenrate实体关联中遇到的问题

1.org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.shoponline.merchant.entity.TblCategoryThird#29] 解决办法:实体关联后,缺失了数据的完整性,把原有数据删除,再添加新的数据。 2.Caused by: java.sql.SQL

学而不思 1613

hibenrate(八)一对一对象关系

一、一对一单/双向外键关联(Annotation) Annotation: @OneToOne @JoinColumn(name="") XML:

无与伦比&Switch* 180

Hibenrate 中 inverse="true"

    转:http://www.iteye.com/topic/766211   public class Customer { private int id; private String name; private Set orders = new HashSet(); }     即Customer类具有一个set集合...

terryjs 166

精通Hibernate——映射一对多双向自身关联关系

首先我们来看下图: 每种商品类别代表一个Category对象,每一个Category可以和父列表关联,同时也可以和子类别关联,为了表达这种一对多的双向自身关联关系可以在Category类中定义两个属性: parentCategory:引用父类别对象 childCategories:引用一组子类别对象 下面看看Category的源代码:public class Category imp

路漫漫,水迢迢 1359

Hibernate一对多单向关联映射

                   一对多关联映射(单向) 1、People.hbm.xml xml version="1.0" encoding="UTF-8"?>DOCTYPE hibernate-mapping         PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"http://hibernate.so

thinkGhoster的专栏 1532

Hibenrate讲解iverse和cascade以及一对多配置比较好的一篇文章

http://www.iteye.com/topic/314785

endeavor416 153

Hibernate异常等问题

Hibernate中No row with the given identifier exists问题的原因及解决             产生此问题的原因:              有两张表,table1和table2.产生此问题的原因就是table1里做了关联或者(特殊的多对一映射,实际就是一对一)来关联table2.当hibernate查找的时候,table2里的数据没有与table1

datangxiajun的博客 293

hibernate多对一,一对多,多对多,一对一举例案例(注解方式实现)

1. 需要用到的jar包antlr-2.7.7.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.7.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar javassist-3.15.0-GA.jar jboss-logging-3.1...

hq.zheng的博客 2159

Hibenrate_基于单实例配置及使用_初级小结_初级配置

 Hibernate是一个基于JDBC的主流持久化框架,是一个ORM的实现ORM(对象-关系映射机制)创建Hibernate步骤:1:Hibernate配置文件: 文件默认名为:"hibernate.cfg.xml",                文件类型为"-//Hibernate-configuration DTD 3.0//EN"(注:不要搞错了!!!)/..               

Mr_Feeling的专栏 633

(1)hibenrate入门例子

1 结构图 2 代码 User.java package com.learning; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; }

jianfpeng241241的专栏 528

NHibernate报错:No row with the given identifier exists

这个和Hibernate错误差不多,原因是你的数据库里面有脏数据,即:外键关联的对应主键内容不存在,就像报的这个错误,查询出的User没有了引用。 产生此问题的原因: 1.有两张表,table1和table2.产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-one unique="true">(特殊的多对一映射,实际就是一对一)来关联table 2.当hibernate查找的时候,table2里的数据没有与table1相匹配的,这样.

qq_41617901的博客 448

全自动纸箱包装机.rar

全自动纸箱包装机.rar

双工位铆接机.rar

双工位铆接机.rar

上一篇: Hibernate之一对多关联
下一篇: SVN起步
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值