hibernate学习之路(hibernate实体对象的三种状态)
2015-09-25 13:45
387 查看
hibernate实体对象一共有三种状态(标准为是否在数据库中有数据以及和session是否有关联)
1. 瞬时对象 (transient) 数据库没有数据与之对应,并且与session也无关联
2.持久化对象 (persistent) 数据库有相对应的数据,并且与当前的session有关联,hibernate能够检测到对象的改变
3.脱管对象 (detached) 数据库已经存在数据,但是与当前的session无关联
(1)下面的两个图片详细说明了这三种对象状态之间的联系
第二个图片显示一般是对脱管对象调用update()方法;这个时候session没有与之对应保存一般是对瞬时对象当不知道对象是瞬时还是脱管的时候,saveorupdate()方法就适用了。
(2)以下代码分别说明了三种对象的不同存在情况
<!-------------------------主函数,用于创建和调用方法---------------------------------------->
public static void main(String[] args) {
Event event = new Event();
event.setTitle("apple");
event.setDate("10.02");
// 这里的event对象的状态就是瞬间对象,数据库中不存在数据,与session也无关联
System.out.println(event.getDate());
//------------------------//
addEvent(event);
//这里的event对象为脱管状态,数据库中存在对应的数据,session与之无关联
System.out.println(event.getDate());
}
<!-----------------用于添加数据到数据库中------------------------------------------------------>
static void addEvent(Event event) {
Session session = null;
Transaction transaction = null;
try {
session = hibernateUtil.getSession();
// 开启事务
transaction = session.beginTransaction();
// 保存数据
session.save(event);
//这个时候的对象是持久化状态
system.out.println(event.getdate());
event.setdate(*111*); //会在数据库产生一个update语句
// 提交
transaction.commit();
} catch (HibernateException e) {
if (transaction != null)
transaction.rollback();
// 必须要处理异常
throw e;
} finally {
// 关闭
if (session != null)
session.close();
}
}
<!------------------------hibernate 的工具类,返回一个session对象------------------------------------->
/**
* 将类设置为final类型,不允许别人继承
*
* @author hugenshen
*
*/
public final class hibernateUtil {
private static SessionFactory sessionFactory;
private hibernateUtil() {
}
static {
Configuration cfg = new Configuration();
//加载配置文件 默认名字为hibernate.cfg.xml 可以进去看源码
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
//获取session的方法
public static Session getSession() {
return sessionFactory.openSession();
}
}
1. 瞬时对象 (transient) 数据库没有数据与之对应,并且与session也无关联
2.持久化对象 (persistent) 数据库有相对应的数据,并且与当前的session有关联,hibernate能够检测到对象的改变
3.脱管对象 (detached) 数据库已经存在数据,但是与当前的session无关联
(1)下面的两个图片详细说明了这三种对象状态之间的联系
第二个图片显示一般是对脱管对象调用update()方法;这个时候session没有与之对应保存一般是对瞬时对象当不知道对象是瞬时还是脱管的时候,saveorupdate()方法就适用了。
(2)以下代码分别说明了三种对象的不同存在情况
<!-------------------------主函数,用于创建和调用方法---------------------------------------->
public static void main(String[] args) {
Event event = new Event();
event.setTitle("apple");
event.setDate("10.02");
// 这里的event对象的状态就是瞬间对象,数据库中不存在数据,与session也无关联
System.out.println(event.getDate());
//------------------------//
addEvent(event);
//这里的event对象为脱管状态,数据库中存在对应的数据,session与之无关联
System.out.println(event.getDate());
}
<!-----------------用于添加数据到数据库中------------------------------------------------------>
static void addEvent(Event event) {
Session session = null;
Transaction transaction = null;
try {
session = hibernateUtil.getSession();
// 开启事务
transaction = session.beginTransaction();
// 保存数据
session.save(event);
//这个时候的对象是持久化状态
system.out.println(event.getdate());
event.setdate(*111*); //会在数据库产生一个update语句
// 提交
transaction.commit();
} catch (HibernateException e) {
if (transaction != null)
transaction.rollback();
// 必须要处理异常
throw e;
} finally {
// 关闭
if (session != null)
session.close();
}
}
<!------------------------hibernate 的工具类,返回一个session对象------------------------------------->
/**
* 将类设置为final类型,不允许别人继承
*
* @author hugenshen
*
*/
public final class hibernateUtil {
private static SessionFactory sessionFactory;
private hibernateUtil() {
}
static {
Configuration cfg = new Configuration();
//加载配置文件 默认名字为hibernate.cfg.xml 可以进去看源码
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
//获取session的方法
public static Session getSession() {
return sessionFactory.openSession();
}
}
相关文章推荐
- 常用工具博客
- 通过一个app启动另一个app应用程序
- JavaScript高级程序设计之JavaScript 简介 第1.1讲笔记
- 2016搜狐2叠罗汉
- node js 读取文件内容
- Nginx+Tomcat7+Mencached负载均衡集群部署笔记
- 用vbs等实现辅助网站的后台运行工作进程(三)
- 2015(第五届)中国未来网络发展与创新论坛 征文通知
- 关于如何使用枚举类的values方法!
- Repeater 嵌套,子级Repeater获取 父级Repeater 中的值
- node中非常重要的process对象,Child Process模块
- thinkphp根据时间戳查询时间范围内的记录
- SAT数学应试技巧【zhasite】
- 正则表达式30分钟入门教程
- 如何选择Blocks还是Delegates
- 【加密教程】:加密教程四之前缀加密报表的生成
- 学习计划与目标
- test7.3 &7.4
- POJ 2528 Mayor's posters
- 中国省份代码表