`
p_3er
  • 浏览: 55734 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

第九章 关系映射 一对多关联映射

 
阅读更多

如:departmentemployee

employee中有一个department_id的外键

Department:

public class Department implements Serializable {
	private Integer id;
	private String name;
	private Set<Employee> employees;

	public Set<Employee> getEmployees() {
		return employees;
	}

	public void setEmployees(Set<Employee> employees) {
		this.employees = employees;
	}

	public Department() {
	}

	public Integer getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}



Employee:

public class Employee implements Serializable {
	private Integer id;
	private String name;

	public Employee() {
	}

	public Integer getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}


Department.hbm.xml:(与普通的映射文件一样)

<hibernate-mapping>
	<class name="cn.framelife.hibernate.entity.Department" table="department"
		catalog="hibernate">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
		</id>
		<property name="name" type="java.lang.String">
			<column name="name" length="45" not-null="true" />
		</property>	
                <set name="employees" inverse="false" cascade="all">
			<key column="department_id"></key>
			<one-to-many class="cn.framelife.hibernate.entity.Employee"/>
		</set>
	</class>
</hibernate-mapping>


Employee.hbm.xml:

<hibernate-mapping>
	<class name="cn.framelife.hibernate.entity.Employee" table="employee"
		catalog="hibernate">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="native"></generator>
		</id>
		<property name="name" type="java.lang.String">
			<column name="name" length="45" not-null="true" />
		</property>	
	</class>
</hibernate-mapping>

增加:

transaction = session.beginTransaction();
			Department department = new Department();
			department.setName("zzza");
			Set<Employee> set = new HashSet<Employee>();
			for(int i=0; i < 5; i++){
				Employee employee = new Employee();
				employee.setName("zz"+i);
				set.add(employee);
			}
			department.setEmployees(set);
			session.save(department);
			transaction.commit();


查询:

查询department的时候可以得到外键关联的所有employee对象。



注意事项:

a、错误提示:Field'department_id' doesn't have a default value
数据表中把"department_id"设成可以为空的,但是Hibernate先执行的是:

因为hibernate执行的顺序是这样的:

Hibernate:insert into hibernate.department (name) values (?)

Hibernate:insert into hibernate.employee (name) values (?)

Hibernate:insert into hibernate.employee (name) values (?)

Hibernate:insert into hibernate.employee (name) values (?)

Hibernate:insert into hibernate.employee (name) values (?)

Hibernate:insert into hibernate.employee (name) values (?)

Hibernate:update hibernate.employee set department_id=? where id=?

Hibernate:update hibernate.employee set department_id=? where id=?

Hibernate:update hibernate.employee set department_id=? where id=?

Hibernate:update hibernate.employee set department_id=? where id=?

Hibernate:update hibernate.employee set department_id=? where id=?

department_id外键是作为一个后来才更新的存在。所有不能设置为非空的。


b
Department.hbm.xml中要设置cascade="all"(级联),或其它有效值,不然,在保存Department对象时,相关的Employee对象不会被保存。(none,all,save-update,delete..)


c
Department.hbm.xmlset标签的inverse属性不能设置为"true"放弃维护关联关系),inverse的默认值是"false",所以不加inverse也可以。看书上说:在一对多的关联关系实现中,最好设置inverse="true",将有助于性能的改善。所以一开始就用了inverse="true"UserCard对象都分别正确写入数据库了,但是就是departmentID字段没有被自动写入。


d、多对一与一对多可以一起用,形成双向关系。

多对一映射的使用:http://blog.csdn.net/p_3er/article/details/9036759


e.one-to-manymany-to-onemany-to-many懒加载分析:

必须同时满足下面的两个条件时才能实现懒散加载:

1).lazy!=false(lazy缺省方式就!=falselazy=proxy)

2).fetch=select(fetch缺省方式即为select)



分享到:
评论

相关推荐

    Hibernate关联关系映射目录

    在一对多连接表单向关联中,一个实体(父实体)与多个实体(子实体)相关联,这种关联通过第三个表(连接表或关联表)来实现。 **表结构示例**: - **Department表**: - `departmentid`: 主键 - `departmentName`...

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

    本主题将主要聚焦在一对一和一对多关联。 2. **关联的方向性:** 关联可以是单向或双向的。单向关联只能从一个实体访问另一个,而双向关联允许两个实体之间互相访问。 3. **@OneToOne, @OneToMany, @ManyToOne ...

    第9章Mybatis映射篇之结果映射

    Mybatis还支持关联映射,如一对多、多对一的关系映射。例如,如果`User`类还有一对多的`Address`关系,可以使用`&lt;collection&gt;`标签: ```xml &lt;!-- ... --&gt; &lt;!-- ... --&gt; ``` 此外,Mybatis提供了自动...

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

    9. **缓存机制**:理解Hibernate的第一级缓存(Session缓存)和第二级缓存(可选,如EHCache),它们如何影响一对多关联的读写操作。 10. **性能考虑**:在设计一对多双向组合关联时,要考虑到查询效率、内存消耗等...

    hibernate多对多双向关联

    "hibernate_many2many_2"这个文件名可能是指一个关于Hibernate多对多关联的示例或教程的第二部分,可能包含配置文件、Java实体类、映射文件以及相关的测试代码。 **详细知识点:** 1. **实体类定义**:在Hibernate...

    按键映射3.1随意映射键盘按键

    在IT领域,键盘映射是一种技术,允许用户自定义或...总之,“按键映射3.1随意映射键盘按键”是一个强大的工具,让使用者能够根据自己的需求定制键盘,提高工作效率,同时也展现了IT行业对用户体验的重视和持续创新。

    asp.net 数据映射方案

    3. **实体类(Entities)**:阐述了如何定义表示数据库表的实体类,以及如何定义它们之间的关系,如一对一、一对多、多对多。 4. **查询(Linq to Entities)**:展示了如何使用Linq(Language Integrated Query)...

    精通Java Web整合开发(第2版)

    12.4.6 一对多双向关联的annotation注解实现540 12.4.7 一对多双向自身关联的annotation注解实现542 12.4.8 多对多单向关联的annotation注解实现543 12.4.9 多对多双向关联的annotation注解实现545 12.4.10 组成关系...

    内蒙古师范大学附属中学高中数学2.1.1第2课时映射同步练习含解析新人教B版必修1

    题目中指出,映射可能是多对一的关系,即B中的元素可以对应A中的多个元素,但A中的每个元素在B中必须有且仅有一个象。 4. **映射的表示与计算**:映射可以通过函数关系式来表示,如题目中的f:x→x²或者f:x→x+y...

    精通 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版).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: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...

    精通 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...

    离散数学-集合论,共9章,比较全面

    映射的性质,如一对一、一对多、多对一和多对多映射,以及逆映射、复合映射的概念都会被详细解释。 第三章“关系”涵盖了关系的定义、性质和分类,如自反性、对称性、传递性和反传递性。此外,关系的闭包、关系的度...

    hibernate_reference中文文档.pdf

    - **7.3.1 一对多 (one-to-many)**:讨论使用连接表的一对多关联映射。 - **7.3.2 多对一 (many-to-one)**:介绍使用连接表的多对一关联映射。 - **7.3.3 一对一 (One-to-one)**:说明使用连接表的一对一关联映射...

    答案《关系数据库与SQL语言》第一章练习题.pdf

    《关系数据库与SQL语言》第一章练习题主要涵盖了数据库的基础概念、数据模型、关系数据库的关键特性以及SQL语言的相关知识。以下是对这些知识点的详细说明: 1. **实体完整性**:实体完整性是关系数据库的一个核心...

    答案《关系数据库与SQL语言》第一章练习题.docx

    5. **联系类型**:实体间可能有一对一、一对多、多对多等不同的联系。例如,教师和课程之间的联系是多对多的,一个教师可以教授多门课程,一门课程也可以由多个教师授课。 6. **数据模型**:数据库系统中的数据模型...

    Accp6.0 Y2 Hibernate1-2章上机练习和课后代码

    7. **一对多、多对一、多对多关系映射**:在chapter02的实践中,你可能遇到实体类之间的一对多、多对一或者多对多关系。Hibernate提供了多种方式来处理这些关系,例如集合映射、联接表等。 8. **懒加载和立即加载**...

Global site tag (gtag.js) - Google Analytics