hibernate学习之路(hibernate实体对象的三种状态)

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();
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值