一. User.java
package test;
import java.util.Set;
public class User {
private Integer id;
private String name;
private String password;
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;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
二.User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="test">
<class name="User" table="userinfo">
<id name="id" column="id" type="integer">
<generator class="increment"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="password" column="password" type="string"></property>
</class>
</hibernate-mapping>
三.LifeCycle.java
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class LifeCycle {
public static final SessionFactory sessionFactory;
static{
//初始化SessionFactory;
sessionFactory=new Configuration().configure().buildSessionFactory();
}
//生命周期测试
public static void lifecycle(){
//创建临时实体对象User
User user=new User();
user.setName("abc"+String.valueOf(Math.random()));
user.setPassword("def");
//user仍处于临时状态
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
//user仍处于临时状态
session.save(user);
//此时,user已经被纳入Hibernate实体管理器中,并转为Persistent状态
System.out.println("User 1:"+user);
//此时的id已经有值了。
get(user.getId());
//但并未真正执行数据库操作,所以无法得到对象的值
tx.commit();
//事务被提交后,将向数据库插入一条记录
System.out.println("Transaction 1 commit!");
get(user.getId());
//这时可以出数据库中得到刚插入的对象
Transaction tx2=session.beginTransaction();
user.setPassword("mmmmmmmmmm");
tx2.commit();
//虽然这个事务并没有调用session的save()方法来保存User对象
//但由于这个对象处理持久状态,那么任何修改都会被持久化到数据库中。
System.out.println("Transaction 2 commit!");
session.close();
get(user.getId());
//此时密码已经变成新值。
}
public static User get(Integer id){
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
User user=(User)session.get(User.class, id);
System.out.println("在GET中:"+user);
tx.commit();
session.close();
return user;
}
public static void main(String args[]){
LifeCycle.lifecycle();
}
}
分享到:
相关推荐
- `persistence`:持久化相关的接口和类,定义了实体生命周期管理。 - `query`:包含了HQL和Criteria查询的实现。 - `session`:`Session`是与数据库交互的主要接口,代表了一次数据库会话。 - `transaction`:...
5. Entity Manager:作为JPA的核心组件,管理Entity的生命周期,处理事务,并负责Session的透明管理。 四、配置与使用 使用Hibernate ORM通常需要配置Hibernate配置文件(hibernate.cfg.xml),定义数据库连接参数...
6. **事件监听机制**:允许开发者在特定的生命周期事件(如加载、保存、更新、删除等)上添加自定义行为。 7. **关联映射**:支持一对一、一对多、多对一和多对多等各种关联关系的映射,使得对象间的关联关系能够...
1. 支持JPA 2.1规范:提供了新的查询元素,如TemporalType,以及更丰富的实体生命周期回调。 2. 强化了第二级缓存:引入了对查询结果的缓存支持,提高了系统响应速度。 3. 优化了HQL和JPQL查询:增强了类型安全性和...
本次我们将深入探讨的版本是`hibernate-release-5.0.0.Final(1)`,这个版本在Hibernate的生命周期中具有重要的地位,它引入了多项新特性和改进,旨在提升开发效率和性能。 一、Hibernate概述 Hibernate是Java领域中...
- 异步事件监听器:允许开发者实现异步的生命周期事件处理,提高应用的并发处理能力。 3. “required”文件夹详解: 这个文件夹通常包含以下核心组件: - hibernate-core.jar:Hibernate的主要实现,包括核心API...
Entity Manager是JPA中的核心组件,用于管理实体对象的生命周期。 3. **hibernate-jpa-2.1-api.jar**:这是JPA 2.1的API接口定义,提供了一套标准的持久化编程模型,使得不同ORM框架如Hibernate、EclipseLink等可以...
7. **事件监听和拦截器**:Hibernate允许注册监听器或拦截器来处理对象生命周期中的事件,如对象的加载、保存、更新和删除,可用于实现特定业务逻辑。 8. **JPA集成**:Hibernate 4.x版本开始支持Java Persistence ...
- Entity Manager:负责实体的生命周期管理,如持久化、检索、更新和删除。 - Session Factory:创建Session的工厂,负责配置信息的加载和会话的创建。 - Session:与数据库交互的接口,执行CRUD操作,提供事务...
14. **拦截器(Interceptor)**:可以通过实现`org.hibernate.Interceptor`接口,自定义在对象生命周期中的行为。 在实际开发中,理解并熟练运用这些知识点,可以极大地提高Java应用程序的开发效率和数据库操作的...
一级缓存是Session级别的,自动管理对象的生命周期;二级缓存则可以跨Session共享,可以通过插件如Ehcache实现。 9. **查询语言HQL**:Hibernate提供了自己的查询语言——Hibernate Query Language(HQL),它是...
4. **实体生命周期管理** - `@PrePersist`, `@PostPersist`: 在对象持久化前后的回调方法。 - `@PreUpdate`, `@PostUpdate`: 在对象更新前后的回调方法。 - `@PreRemove`, `@PostRemove`: 在对象删除前后的回调...
《Hibernate 4.2.19.Final:持久化框架的深度解析》 ...通过深入理解并熟练掌握其核心概念和用法,我们可以构建出更加健壮和高性能的系统。在实际项目中,灵活运用这些知识,将大大提升开发效率和代码质量。
- **SessionFactory和Session的生命周期**:SessionFactory是线程安全的,整个应用程序只需要一个;而Session是短暂的,通常在一次数据库操作后关闭。 4. **配置与初始化** Hibernate的配置文件(hibernate.cfg....
深入理解Hibernate源码有助于开发者更高效地解决问题,例如,通过阅读Session和SessionFactory的实现,可以了解对象的生命周期管理;查看Query和CriteriaAPI的源码,可以掌握复杂的查询机制;理解Hibernate的二级...
本书深入探讨了Servlets的工作原理、生命周期以及如何使用Servlets进行会话管理、过滤器的配置和监听器的实现。 #### 5. Web开发流程与最佳实践 除了技术细节,本书还强调了Web开发的整体流程,包括需求分析、系统...
Hibernate提供了事件监听器和拦截器机制,可以在对象的生命周期事件(如持久化、更新、删除等)发生时进行定制化的操作。 9. **JPA支持**: Hibernate 5.2.9.Final版本全面兼容Java Persistence API(JPA),使得...
在Hibernate中,每个持久化对象都有一个生命周期,理解这些生命周期状态对于优化性能和正确管理数据库记录至关重要。 **一、持久化对象的状态** 1. **瞬时态(Transient)**:对象刚刚被创建,尚未与Session关联,...
2. 对象状态管理:管理对象的生命周期,包括瞬时态、持久态、托管态和脱管态。 3. 数据缓存:通过二级缓存机制提高性能,如使用Ehcache作为默认缓存提供商。 4. HQL和 Criteria API:强大的查询语言,可进行复杂的...
10. **事件和监听器**:Hibernate允许开发者通过实现特定接口或使用注解来监听对象生命周期中的某些事件,如加载、保存、更新和删除,以便进行额外的操作。 11. **方言(Dialect)**:Hibernate支持多种数据库,...