`

hibernate三种状态及常用方法

阅读更多
用hibernate做了几个小项目了 不过感觉就用了ormapping 一些save方法 query方法
很多东西也不明白 也没专门去搞清楚,昨天去面试问了挺多东西 我答得都模棱两可的
不过好像也没错 呵呵 不过还是应该搞搞清楚

今天看了尚学堂的视频 做点小结吧

package my.hibernate.util;


import my.hibernate.pojo.Customer;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class Base {

	
	public static void main(String... args)
	{
		/*Customer customer=new Customer();
		customer.setName("YM");
		//上面的对象处于瞬时态 其与数据库和session都没关系
		
		add(customer);
		System.out.println("customerid是"+customer.getCustomerid());*/
		//上面的对象处于脱管态 数据库中有相应的记录 但是因为session已经关闭 故与session无关了
		
		//对脱管状态的对象进行更新的时候需要调用update方法
		Customer customer=getCustomerById(18);
		
		System.out.println("所查询的用户是"+customer.getName());
	}
	
	//添加
	static void add(Object obj)
	{
		Session session=null;
		Transaction tx=null;
		try
		{
			session=HibernateUntil.getSession();
			tx=session.beginTransaction();
			
			//如果没有事务的话 会插入数据库 又被回滚
			session.save(obj);
			//obj此时属于持久状态 在session关闭之前都处于持久状态
			//处于持久态的对象发生变化的时候 数据库中也会发生相应变化
			
			//如果没有事务的话 persist方法则不插入数据库 会报错
			//session.persist(obj);
			
			
			//调用saveOrUpdate()方法的时候对象会变成持久态
			//而调用merge()方法的时候对象写入了数据库但对象依然是脱管的
			tx.commit();
			//如果处于持久态的对象进行了修改 hibernate将在commit的时候写到数据库中
		}
		//catch部分不写也可以!
		catch(HibernateException ex)
		{
			//事物回滚 并且将异常抛出
			if(tx!=null)
				tx.rollback();
			throw ex;
			}
		finally
		{
			if(session!=null)
				session.close();
		}
	}
	
	static Customer getCustomerById(int id)
	{
		Session session=null;
		try
		{
			session=HibernateUntil.getSession();
			//get是从数据库中查询一条记录
//			Customer customer=(Customer)session.get(Customer.class, id);
			
			//load是懒加载 并没有直接访问数据库 等到调用的时候 比如customer1.getName()时候才进行数据库访问,这种方式不推荐多用
			//因为任何时候customer1都不是为空的 load自己new了一个对象!! 如果库表中没有该记录 但customer1也不是空的 明白???!!
			Customer customer1=(Customer)session.load(Customer.class, id);
			
			//这个时候才会访问数据库 没有这句话将会报错
			customer1.getBandid();
			return customer1;
		}
		finally
		{
			if(session!=null)
				session.close();
		}
	}
}

  • 大小: 21.5 KB
分享到:
评论

相关推荐

    Hibernate三种状态和Session常用的方法

    本文主要介绍了Hibernate三种状态和Session常用的方法,具有很好的参考价值,下面跟着小编一起来看下吧

    hibernate 3中的缓存小结

    当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象...

    mybatis和hibernate.pdf

    mybatie和hibernate相关面试题,包括常用xml标签,一二级缓存等信息hibernate优化以,hibernate在Java中的三种状态,hibernate检索方式

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  8.4.1 Session的save()和persist()...

    第24次课-1 Spring与Hibernate的整合

    HibernateTemplate还提供了一种更灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。 HibernateTemplate的灵活访问方式是通过如下两个方法完成的: Object execute(HibernateCallback action) ...

    hibernate基础 二 关联映射 级联操作

    hibernate 的基础 常用的主键生成策略 持久化对象的三种状态 一级缓存的常用操作(save/update/saveOrUpdate/delete)一对多关联映射 级联操作

    Hibernate注释大全收藏

    Hibernate 可以对类的属性或者方法进行注解。属性对应field类别,方法的 getXxx()对应property类别。 定义表 通过 @Table 为实体Bean指定对应数据库表,目录和schema的名字。 @Entity @Table(name="tbl_sky") ...

    精通Hibernate:对象持久化技术第二版part3

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  8.4.1 Session的save()和persist()...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  8.4.1 Session的save()和persist()...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  8.4.1 Session的save()和persist()...

    Java求职面试宝典各大公司常考知识点

    1.4. hibernate的对象的三种持久化状态,并给出解释? 3 1.5. hibernate的三种状态之间如何转换 3 1.6. hibernate中一对多配置文件返回的是什么? 4 1.7. update()和saveOrUpdate()的区别? 4 1.8. hibernate...

    Java Spring常用高性能连接池以及属性

    * DBCP在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。 * Proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。 * ...

    基于struts+hibernate+spring的会员管理系统源码

    1.常用功能 会员登记,会员充值,会员充次,商品消费(会员),商品消费(散客),快速消费(会员),快速消费(散客),计次消费,挂单列表 打印区 消费打印,充值打印,交班打印 报表中心 消费流水,消费明细表 2....

    Struts+Hibernate+Spring常见面试题

    单态 模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。

    java面试题

    hibernate的三种状态之间如何转换 59 71.6. Hibernate并发机制,并发问题的处理。 59 71.6.1. Hibernate并发机制 59 71.6.2. 并发问题解决方案 59 71.7. Hibernate是如何延迟加载? 60 71.8. Hibernate中怎样实现类...

    java面试宝典

    一般用截取ID方法,还有是三层嵌套方法。 47 200、xml有哪些解析技术?区别是什么? 48 201、你在项目中用到了xml技术的哪些方面?如何实现的? 48 202、用jdom解析xml文件时如何解决中文问题?如何解析? 48 203、编程用...

    Java面试宝典2020修订版V1.0.1.doc

    13、hibernate 数据的三个状态 91 14、Hibernate中load和get的区别? 92 15、Hibernate的工作原理? 92 16、hibernate优缺点? 92 17、Hibernate是如何延迟加载的? 93 18、如果优化Hibernate? 93 19、什么是ORM? ...

Global site tag (gtag.js) - Google Analytics