`
sean2012
  • 浏览: 46082 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate应用cascade&fetch

阅读更多
Hibernate应用cascade&fetch

简单说明:cascade和fetch是Hibernate读取和写入数据库对象两个参数,cascade(层叠)管写入(Save、Update...);fetch管读取(Load、Get...)

一、cascade——它是用来指明做什么操作的时候关联对象绑定在一起:
     a)CascadeType.ALL 表示所有情况
     b)CascadeType.MERGE表示在Save或UPdate的情况
     c)CascadeType.REFRESH=A 里面需要读B改过之后的数据
     d)CascadeType.PERSIST
    e)CascadeType.REMOVE
总之,用得比较多的是CascadeType.All

二、fetch——它是用来指明读取数据时关联对象的情况:
     a)a)FetchType.EAGER   
     b)FetchType.LAZY(默认)

三、实例代码:

团队类:
package com.sean.model.one2many;

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

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * 一对多:团队对象
 * 
 * @author Sean 2013-2-26
 * 
 */
@Entity
@Table(name = "p_group")
public class Group {

	private int id;
	private String name;
	private Set<Person> pset = new HashSet<Person>();

	@OneToMany(cascade = (CascadeType.ALL), fetch = FetchType.EAGER)
	public Set<Person> getPset() {
		return pset;
	}

	public void setPset(Set<Person> pset) {
		this.pset = pset;
	}

	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

}


成员类:
package com.sean.model.one2many;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;


/**
 * 一对多:成员对象
 * 
 * @author Sean 2013-2-26
 * 
 */
@Entity
public class Person {

	private int id;
	private String name;
	private Group group;

	@ManyToOne(cascade = CascadeType.ALL)
	public Group getGroup() {
		return group;
	}

	public void setGroup(Group group) {
		this.group = group;
	}

	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

}


测试方法:
	public void testGroup2Person() {

		Group g = new Group();
		g.setName("淘宝");

		Person p1 = new Person();
		Person p2 = new Person();
		Person p3 = new Person();
		Person p4 = new Person();
		p1.setName("赵一");
		// p1.setGroup(g);
		p2.setName("赵二");
		// p2.setGroup(g);
		p3.setName("赵三");
		// p3.setGroup(g);
		p4.setName("赵四");
		// p4.setGroup(g);

		g.getPset().add(p1);
		g.getPset().add(p2);
		g.getPset().add(p3);
		g.getPset().add(p4);
		SessionFactory factory = new AnnotationConfiguration().configure()
				.buildSessionFactory();
		Session session = factory.openSession();
		session.beginTransaction();
		session.save(g);
		session.getTransaction().commit();
		session.close();
		factory.close();

	}

	public void testLoadGroup() {
		testGroup2Person();
		SessionFactory factory = new AnnotationConfiguration().configure()
				.buildSessionFactory();
		Session session = factory.openSession();
		session.beginTransaction();

		Group group = (Group) session.get(Group.class, 17);

		session.getTransaction().commit();
		session.close();
		factory.close();

		for (Person i : group.getPset()) {
			System.out.println(i.getName());
		}

	}
分享到:
评论

相关推荐

    Hibernate教程15_关联关系中的CRUD Cascade_Fetch

    在本教程中,我们将深入探讨Hibernate中的关联关系及其在CRUD操作中的应用,特别是关于Cascade和Fetch策略。Hibernate是Java领域广泛使用的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来处理数据库交互...

    优化Hibernate性能的几点建议

    在使用Hibernate进行数据查询时,Fetch Size的设置对性能有着显著的影响。Fetch Size是指每次从数据库中取出的数据行数,默认情况下,Oracle数据库的JDBC驱动程序中的Fetch Size被设置为15。然而,将Fetch Size增加...

    hibernate

    通过上述内容,我们了解了Hibernate中`fetch`, `lazy`, `cascade`, 和 `inverse`的关键概念及其应用场景。这些概念对于高效管理对象之间的关系至关重要,特别是在大型项目中。正确地理解和运用这些特性能够帮助开发...

    Hibernate应用例子one-to-one

    【Hibernate应用例子one-to-one】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它允许开发者以面向对象的方式操作数据库,从而简化了数据库应用程序的开发。在Hibernate中,"one-to-one"(一对一)关联是...

    Hibernate笔记

    Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程。通过使用Hibernate,开发者可以将对象模型与关系型数据库模型进行映射,从而避免了大量的SQL编写工作。本文档详细...

    hibernate api

    这些知识点构成了Hibernate 3.0 API的基础,通过熟练掌握和应用这些功能,开发者能够高效地进行数据库操作,减少与数据库的直接交互,提高代码的可维护性和可读性。在实际项目中,结合提供的中文帮助文档,学习和...

    Hibernate教程

    Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。本教程将深入探讨Hibernate的核心概念、配置、实体映射以及如何通过它来简化数据库交互。 一、...

    hibernate注解详解

    本文将深入探讨Hibernate中的注解,帮助你更好地理解和应用它们。 1. **实体注解(@Entity)** `@Entity` 注解用于标记一个Java类为Hibernate的实体类,它对应数据库中的一个表。例如: ```java @Entity public ...

    hibernate关联关系总结

    在Hibernate中,可以通过@OneToOne注解来定义这种关系,可以指定fetch属性来控制加载策略,并通过cascade属性设置级联操作。同时,可以使用@PrimaryKeyJoinColumn注解来指定主键的关联。 2. **一对多关联...

    hibernate源码 直接使用

    3. **关联映射**: 对于一对一、一对多和多对多关系,需要在实体类中添加关联注解,如@OneToOne、@OneToMany、@ManyToMany,并设置fetch属性和cascade属性来控制加载和操作行为。 4. **SessionFactory和Session**: ...

    hibernate小白极简实例

    Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。对于初学者来说,理解并应用Hibernate可能有些复杂,但通过简单的实例,我们可以快速入门。这个实例将涵盖Hibernate...

    hibernate讲义

    通过深入理解和熟练应用这些知识点,开发者能够充分利用 Hibernate 提供的强大功能,降低数据库操作的复杂性,提高 Java 应用程序的开发效率。在实际项目中,根据需求和场景选择合适的映射方式、缓存策略和事务管理...

    Hibernate-annotations-3.4最新版本

    例如,@LazyCollection和@Fetch(FetchMode.JOIN)可以控制集合属性的加载策略,@Cascade则能设置级联操作的行为,如保存、删除等。 总的来说,Hibernate-annotations-3.4.0.GA是Hibernate框架中的一把利器,它通过...

    Hibernate_实体类_注解_说明

    此注解还可以包含`fetch`和`cascade`属性,进一步控制关联的加载方式和级联行为。 ### 综合运用 了解并熟练掌握上述注解,对于高效开发基于Hibernate的应用至关重要。它们不仅简化了实体类的设计,还增强了代码的...

    Hibernate 项目图片资料

    在本文中,我们将深入探讨Hibernate的关键知识点,以便更好地理解和应用。 1. **对象关系映射(ORM)** Hibernate是ORM(Object-Relational Mapping)工具的代表,它将复杂的SQL操作转换为对Java对象的操作,降低...

    Hibernate3.2学习笔记

    配置文件中的`hibernate.hbm2ddl.auto`属性可以设置为`update`,这样在应用启动时,Hibernate会根据实体类自动更新数据库表结构。 接下来,我们讨论实体类与数据库表的映射。每个Java类代表数据库中的一个表,每个...

    Hibernate多对一映射(注解版)

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "department_id") private Department department; ``` **二、示例代码** 在`Demo6`中,可能包含以下内容: 1. `...

    hibernate_api

    9. **Fetch Mode**: Hibernate允许设置懒加载(lazy loading)和Eager加载策略,控制关联对象何时从数据库加载。 10. **Listener**: Hibernate支持事件监听器,如PreInsertEventListener、PostUpdateEventListener...

    Hibernate关联关系练习【全】

    同时,可以使用cascade属性控制级联操作,如保存、删除等。 多对一(ManyToOne)关系是上述关系的反转,比如每个学生属于一个班级。@ManyToOne注解用于表示这种关系,它可以与@JoinColumn一起使用来指定外键列。 ...

Global site tag (gtag.js) - Google Analytics