Hibernate对象状态

Hibernate对象状态:

临时(transeint):一般为new出的对象,与数据库没有对应,跟session没有关联

持久化(persist):对象在session管理之中,与数据库对应

特点:有唯一标识符(OID)

                                   对象的改变同步到数据库

游离(detached):数据库中有对应记录,但对象不再session管理中,修改此状态对象数据库不会有变化

删除(removed):执行了delete()后的对象

状态间的转换关系:

Hibernate对象状态_第1张图片

session中的方法:

一、操作实体对象的

save() 将临时状态变成持久化状态 insert into...

update()将游离状态变成持久化状态 update...

delete() 将持久化或游离状态变成删除状态 delete... 如果删除的对象不存在,会抛出异常

二、查询实体对象的

get() 获取数据,持久化状态 select... 会马上执行sql语句,如果对象不存在,抛出空指针异常

返回的原始对象

load() 获取数据,持久化状态 select... 不会马上执行sql语句

返回的是代理对象,要求类不能是final,否则不能生成子类代理,就不能使用懒加载

让懒加载失效的两种方法:1.类由final修饰,2.在映射文件的class标签中设置lazy="false",lazy默认为true

createQuery()

createCriteria()

三、操作缓存的

clear()

evict()

flush()


session大批量保存

@Test
	public void testBatchSave(){
		Session session=sessionFactory.openSession();
		Transaction tx=session.beginTransaction();
		
		//操作
		//操作大量数据,防止session中对象过多而发生内存溢出
		
		for(int i=0;i<30;i++){
			User user =new User();
			user.setName(i+"test");
			session.save(user);
			
			if(i%5==0){
				session.flush();//先刷新
				session.clear(); //再清空
				
			}
		}
		tx.commit();
		session.close();
	}


你可能感兴趣的:(Hibernate)