一、主键产生器
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();
}
}