Hibernate总结(二)--之主键的产生器和对象状态

一、主键产生器

  1、在xxx.hbm.xml中设置



2、测试代码

public class IDGeneratorTest {
	/**
	 * select max(pid) from person
	 *    先找到主键的最大值,在最大值基础上加1
	 *    所以该主键必须是数字类型
	 */
	@Test
	public void testIncrement(){
		Session session = HibernateUtils.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Person person = new Person();
		person.setName("aaa");
//		person.setPid(1L);		
		session.save(person);
		
		transaction.commit();
		session.close();
	}
	
	/**
	 * 在程序中手动的设置主键的值
	 */
	@Test
	public void testAssigned(){
		Session session = HibernateUtils.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Person person = new Person();
		person.setName("aaa");
		//person.setPid(2L);	//在程序中手动的设置主键的值	
		session.save(person);
		
		transaction.commit();
		session.close();
	}
	
	/**
	 * 表的自动增长机制
	 *   主键必须是数字类型
	 *   该效率比increment要高,但是id值不连续
	 */
	@Test
	public void testIdentity(){
		Session session = HibernateUtils.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Person person = new Person();
		person.setName("aaa");
		
		session.save(person);
		
		transaction.commit();
		session.close();
	}	
	/**
	 * uuid的字符串是由hibernate内部生成的
	 *    要求主键必须是字符串类型
	 */
	@Test
	public void testUUID(){
		Session session = HibernateUtils.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Person person = new Person();
		person.setName("aaa");	
		session.save(person);
		
		transaction.commit();
		session.close();
	}	
	/**
	 * sequence  支持oracle的数据库
	 */
}


二、Hibernate对象的状态

1、对象三种状态



session方法

session.save():该方法可以把一个对象从临时装填转换成持久化状态

session.get():从数据库中根据主键提取出一个对象,该对象就是一个持久化状态的对象

session.update():把一个对象变为持久化对象

session.evict():把一个持久化状态的对象变为脱管状态

session.clear():把所有Hibernate中的持久化状态的对象变为脱管状态的对象


2、测试代码:

public class StateTest {
	/**
	 * 把一个对象的状态从临时状态转化成持久化状态
	 * save可以把一个对象的状态从临时状态转化成持久化状态
	 */
	@Test
	public void testSave(){
		SessionFactory sessionFactory = HibernateUtils.sessionFactory;
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		Person person = new Person();
		person.setName("aaa");
		session.save(person);//该方法可以把一个对象从临时装填转换成持久化状态
		transaction.commit();
		session.close();
	}
	/**
	 * 从数据库中根据主键提取出一个对象,该对象就是一个持久化状态的对象
	 * get可以从数据库中根据主键提取出一个对象,该对象就是一个持久化状态的对象
	 */
	@Test
	public void testGet(){
		SessionFactory sessionFactory = HibernateUtils.sessionFactory;
		Session session = sessionFactory.openSession();
		Person person = (Person)session.get(Person.class, 1L);//持久化状态
		session.close();
	}
	/**
	 *update 把一个对象变成持久化状态
	 */
	
	@Test
	public void testUpdate(){
		SessionFactory sessionFactory = HibernateUtils.sessionFactory;
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		Person person = (Person)session.get(Person.class, 1L);//持久化状态
		person.setDescription("111");
		//session.update(person);//update方法就是把一个对象的状态变成持久化状态,person对象已经是持久化状态了,所以这行代码不需要写
		transaction.commit();
		session.close();
	}
	
	/**
	 * evict方法使得某一个对象变成脱管状态了
	 */
	@Test
	public void testEvict(){
		SessionFactory sessionFactory = HibernateUtils.sessionFactory;
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		Person person = (Person)session.get(Person.class, 1L);//持久化状态
		person.setDescription("111");		
    //		session.evict(person);//该方法可以把一个持久化状态变成脱管状态
   //		session.update(person);//由脱管状态的对象变成持久化状态		
		transaction.commit();
		session.close();
	}
	/**
	 * clear把所有的hibernate中的持久化对象都转换成脱管状态的对象
	 */
	@Testzhuang
	public void testClear(){
		SessionFactory sessionFactory = HibernateUtils.sessionFactory;
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Person person = (Person)session.get(Person.class, 1L);//持久化状态
		person.setDescription("111");
		
		Person person2 = new Person();
		person2.setName("88");
		session.save(person2);//person2是一个持久化状态的对象		
		session.clear();//把hibernate里面的所有的对象都变成脱管状态的对象
		
		transaction.commit();
		session.close();
	}
}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值