`
Luob.
  • 浏览: 1570910 次
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate 关系映射(7) 基于外键关联的单向1:N

阅读更多
基于中间表关联的单向1:N
单向 1 对 N 关联,注意 和 N:1 是相反的

想象下: 吃大锅饭的时候 ,就是很多人住一个地方,一个房间,一个大炕上

eg:  一个地方有多个人住.或者说 多家人
eg:  每个同学记住老师,比老师记住每个同学简单.
(在 n 的一端进行配置效率高)

N            1
Person   : Address
Student  : Teacher

这个里面放的是
单向N 对 1
包括  
无连接表的 N : 1
有连接表的 N : 1

注意需求 是:
以前N:1 是在N的一端配置,也就是因为多个人记住老师 比较容易
现在要在 1的一端配置,就是让一个老师记住所有同学  (这个老师 记忆力比较好) 所以会有 一个集合 放置 所有同学

种类
FKrelated: 基于外键关联
TBrelated: 基于中间表管理


student



teacher




public class Student {

	private Integer sid;
	private String sno;
	private String name;
	private int age;
	private Integer tid;

//...
}
public class Teacher {

	private Integer tid;
	private String name;
	private int age;
	private Double salary;
	
	private Set<Student> students=new HashSet<Student>();


//....
}





DROP TABLE IF EXISTS mytest.teacher;

CREATE TABLE mytest.teacher
	(
	TID    INT NOT NULL,
	NAME   VARCHAR (255),
	AGE    INT,
	SALARY DOUBLE,
	PRIMARY KEY (TID)
	);

	DROP TABLE IF EXISTS mytest.student;

DROP TABLE IF EXISTS mytest.student;

CREATE TABLE mytest.student
	(
	SID  INT NOT NULL,
	SNO  VARCHAR (255),
	NAME VARCHAR (255),
	age  INT,
	tid  INT,
	PRIMARY KEY (SID),
	KEY FKBACA0E1B1429B970 (tid),
	CONSTRAINT FKBACA0E1B1429B970 FOREIGN KEY (tid) REFERENCES teacher (TID)
	);


<hibernate-mapping package="com.sh.study.model.o2n.FKrelated">
	<class name="Teacher" table="TEACHER">
		<id name="tid" type="java.lang.Integer" column="TID">
			<generator class="increment"/>
		</id> 
		<property name="name" type="java.lang.String">
			<column name="NAME" />
		</property>
		<property name="age" type="int">
			<column name="AGE" />
		</property>
		<property name="salary" type="java.lang.Double">
			<column name="SALARY" />
		</property>
	
		<!-- 无连接表的 1:N  注意这里故意 改成 students1 为了证明这里是根据 set get后面的方法名字进行映射-->
		<set name="students1" cascade="all">
			<key column="tid"/>
			<one-to-many class="Student"/>
		</set>
	</class>
</hibernate-mapping>

<hibernate-mapping package="com.sh.study.model.o2n.FKrelated">
	<class name="Student" table="STUDENT">
		<id name="sid" type="java.lang.Integer" column="SID">
			<generator class="increment"/>
		</id> 
		<property name="sno" type="java.lang.String">
			<column name="SNO" />
		</property>
		<property name="name" type="java.lang.String">
			<column name="NAME" />
		</property>
		<property name="age" type="int">
			<column name="age" />
		</property>
		<property name="tid" type="java.lang.Integer">
			<column name="TID" />
		</property>
	</class>
</hibernate-mapping>


test class
package com.sh.test.hibernate.o2n.fkrelated;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sh.study.model.o2n.FKrelated.Student;
import com.sh.study.model.o2n.FKrelated.Teacher;

//测试 Hibernate 基于外键关联的 单向 1:N
public class TestHibrO2N {
	private ApplicationContext act;
	private SessionFactory factory;
	@Before
	public void init(){
		act = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
		factory= act.getBean("sessionFactory",SessionFactory.class);
	}
	@Test
	public void test1() {
		Session session=factory.getCurrentSession();
		Transaction tx=session.beginTransaction();
		
		Student s1=new Student();
		s1.setName("ann");
		s1.setAge(15);
		s1.setSno("s10121");
		

		Student s2=new Student();
		s1.setName("lili");
		s1.setAge(16);
		s1.setSno("s10122");
		
		
		Teacher t1=new Teacher();
		t1.setName("Lukuc");
		t1.setAge(26);
		t1.setSalary(1258.5);
		t1.getStudents1().add(s1);
		t1.getStudents1().add(s2);
		
		//持久化对象
		session.persist(t1);
		session.flush();
		tx.commit();
	
		//如果不是使用的SessionFactory.getSession()来获得Session。
		//而是使用SessionFactory.getCurrentSession()方法来获得Session时,
		//当事务结束的时候,不管是提交还是回滚事务,hibernate会自动关闭Session的,
		//session.close();
	}
	

}

  • 大小: 114.5 KB
分享到:
评论

相关推荐

    Hibernate关联映射-one to one单向外键关联

    NULL 博文链接:https://zhouhaitao.iteye.com/blog/1171227

    Hibernate一对一唯一外键关联映射(单向关联)

    博文链接:https://shaqiang32.iteye.com/blog/201311

    Hibernate关联映射

    Hibernate 一对一外键单向关联 Hibernate 一对一主键单向关联 Hibernate 一对一连接表单向关联 Hibernate 一对多外键单向关联 Hibernate 一对多连接表单向关联 Hibernate 多对一外键单向关联 Hibernate 多对一连接...

    Hibernate关联关系映射目录

    Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ...

    Hibernate教程04_关系映射之一对一单向外键关联

    http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    hibernate学习笔记

    hibernate一对一唯一外键关联映射(单向关联Person----&gt;IdCard) 10 hibernate一对一唯一外键关联映射(双向关联Person&lt;----&gt;IdCard) 11 session flush测试(hibernate_session_flush) 12 hihernate一对多关联映射...

    Hibernate高级映射实例

    Hibernate高级映射的几个单向关系,单向一对一(共享主键方式、唯一外键方式),单向多对一,单向一对多,单向多对多。

    Hibernate_Annotation关联映射

    和其它许多批注一样,在多对多关联中很多值是自动生成,党双向多对多关联中没有定义任何物理映射时,Hibernate根据以下规则生成相应的值,关联表名:主表表名+下划线+从表表名,关联到主表的外键名:主表名+下划线+...

    Hibernate学习笔记

    011 一对一 唯一外键关联映射_单向 012 一对一 唯一外键关联映射_双向 013 session_flush 014 一对多关联映射 单向 015 一对多关联映射 双向 016 多对多关联映射 单向 017 多对多关联映射 双向 018 关联映射文件中...

    Hibernate_实体关联关系映射--学习总结

    Hibernate 实体关联关系映射 学习总结 把一对一 一对多 单向 双向 主键 外键 链接表等讲的比较清楚

    详解Hibernate一对一映射配置

    个人的很详细的Hibernate一对一映射配置详解,对初学者有帮助!

    JSP开发之hibernate之单向多对一关联的实例

    JSP开发之hibernate之单向多对一关联的实例 一对多的基础上来测试单向多对一的关联 hibernate多对一的关联关系定义: 和单向一对多不同的是:一对多是在意的一方的一方定义set集合,在映射文件中 :单向多...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第7章 映射一对多关联关系  7.1 建立多对一的单向关联关系  7.1.1 元素的not-null属性  7.1.2 级联保存和更新  7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3...

    Hibernate注释大全收藏

    Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id;...映射实体Bean的关联关系 一对一 使用 @OneToOne...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

    第7章 映射一对多关联关系  7.1 建立多对一的单向关联关系  7.1.1 元素的not-null属性  7.1.2 级联保存和更新  7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    第7章 映射一对多关联关系  7.1 建立多对一的单向关联关系  7.1.1 元素的not-null属性  7.1.2 级联保存和更新  7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

    第7章 映射一对多关联关系  7.1 建立多对一的单向关联关系  7.1.1 元素的not-null属性  7.1.2 级联保存和更新  7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3...

Global site tag (gtag.js) - Google Analytics