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中的关联关系及其在CRUD操作中的应用,特别是关于Cascade和Fetch策略。Hibernate是Java领域广泛使用的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来处理数据库交互...
在使用Hibernate进行数据查询时,Fetch Size的设置对性能有着显著的影响。Fetch Size是指每次从数据库中取出的数据行数,默认情况下,Oracle数据库的JDBC驱动程序中的Fetch Size被设置为15。然而,将Fetch Size增加...
通过上述内容,我们了解了Hibernate中`fetch`, `lazy`, `cascade`, 和 `inverse`的关键概念及其应用场景。这些概念对于高效管理对象之间的关系至关重要,特别是在大型项目中。正确地理解和运用这些特性能够帮助开发...
【Hibernate应用例子one-to-one】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它允许开发者以面向对象的方式操作数据库,从而简化了数据库应用程序的开发。在Hibernate中,"one-to-one"(一对一)关联是...
Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程。通过使用Hibernate,开发者可以将对象模型与关系型数据库模型进行映射,从而避免了大量的SQL编写工作。本文档详细...
这些知识点构成了Hibernate 3.0 API的基础,通过熟练掌握和应用这些功能,开发者能够高效地进行数据库操作,减少与数据库的直接交互,提高代码的可维护性和可读性。在实际项目中,结合提供的中文帮助文档,学习和...
Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。本教程将深入探讨Hibernate的核心概念、配置、实体映射以及如何通过它来简化数据库交互。 一、...
本文将深入探讨Hibernate中的注解,帮助你更好地理解和应用它们。 1. **实体注解(@Entity)** `@Entity` 注解用于标记一个Java类为Hibernate的实体类,它对应数据库中的一个表。例如: ```java @Entity public ...
在Hibernate中,可以通过@OneToOne注解来定义这种关系,可以指定fetch属性来控制加载策略,并通过cascade属性设置级联操作。同时,可以使用@PrimaryKeyJoinColumn注解来指定主键的关联。 2. **一对多关联...
3. **关联映射**: 对于一对一、一对多和多对多关系,需要在实体类中添加关联注解,如@OneToOne、@OneToMany、@ManyToMany,并设置fetch属性和cascade属性来控制加载和操作行为。 4. **SessionFactory和Session**: ...
Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。对于初学者来说,理解并应用Hibernate可能有些复杂,但通过简单的实例,我们可以快速入门。这个实例将涵盖Hibernate...
通过深入理解和熟练应用这些知识点,开发者能够充分利用 Hibernate 提供的强大功能,降低数据库操作的复杂性,提高 Java 应用程序的开发效率。在实际项目中,根据需求和场景选择合适的映射方式、缓存策略和事务管理...
例如,@LazyCollection和@Fetch(FetchMode.JOIN)可以控制集合属性的加载策略,@Cascade则能设置级联操作的行为,如保存、删除等。 总的来说,Hibernate-annotations-3.4.0.GA是Hibernate框架中的一把利器,它通过...
此注解还可以包含`fetch`和`cascade`属性,进一步控制关联的加载方式和级联行为。 ### 综合运用 了解并熟练掌握上述注解,对于高效开发基于Hibernate的应用至关重要。它们不仅简化了实体类的设计,还增强了代码的...
在本文中,我们将深入探讨Hibernate的关键知识点,以便更好地理解和应用。 1. **对象关系映射(ORM)** Hibernate是ORM(Object-Relational Mapping)工具的代表,它将复杂的SQL操作转换为对Java对象的操作,降低...
配置文件中的`hibernate.hbm2ddl.auto`属性可以设置为`update`,这样在应用启动时,Hibernate会根据实体类自动更新数据库表结构。 接下来,我们讨论实体类与数据库表的映射。每个Java类代表数据库中的一个表,每个...
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "department_id") private Department department; ``` **二、示例代码** 在`Demo6`中,可能包含以下内容: 1. `...
9. **Fetch Mode**: Hibernate允许设置懒加载(lazy loading)和Eager加载策略,控制关联对象何时从数据库加载。 10. **Listener**: Hibernate支持事件监听器,如PreInsertEventListener、PostUpdateEventListener...
同时,可以使用cascade属性控制级联操作,如保存、删除等。 多对一(ManyToOne)关系是上述关系的反转,比如每个学生属于一个班级。@ManyToOne注解用于表示这种关系,它可以与@JoinColumn一起使用来指定外键列。 ...