hibernate.use_identifier_rollback
这是一个很简单的属性,该属性能够设置值为true|false,默认为false。当设置为true的时候,在删除一个Entity的时候,这个Entity的主键值会自动设置回初始状态。下面来看一个很简单的例子:
@Before
public void testSave() {
Session session = HibernateUtil.getInstance().getSession();
session.beginTransaction();
Department d = new Department();
d.setName("de");
session.save(d);
session.getTransaction().commit();
session.close();
}
@Test
public void testDelete(){
Session session = HibernateUtil.getInstance().getSession();
session.beginTransaction();
Department d=(Department)session.get(Department.class, 1L);
session.delete(d);
session.getTransaction().commit();
session.close();
System.out.println(d.getId());
}
先保存一个对象,然后删除他,在默认情况下,控制台输出:1L,因为这个时候Department对象被删除了,但是id还是以前的ID值,所以,在session.close()之后,d应该是临时对象,但是id却有值,这在有些时候是有点烦躁的时候。那么我只需要设置:
hibernate.use_identifier_rollback true
再次运行测试,控制台输出:null,Department对象被删除了,其主键也回退到了最初的状态null,那么这种情况下就可以完全根据对象是否有id值来判断其状态了(在同一线程内)。
hibernate.use_sql_comments
这也是很简单的一个属性,可选值为true|false,默认为false,当设置为true后,hibernate在控制台打印SQL的时候,会为生成的SQL添加注释,可以简单来看看如果这个属性设置为true之后,hibernate会怎么输出?
692 [main] DEBUG org.hibernate.SQL - /* insert cd.itcast.hibernate.day2.many2one.Department */ insert into Department (name) values (?)
712 [main] DEBUG org.hibernate.SQL - /* insert cd.itcast.hibernate.day2.many2one.Department */ insert into Department (name) values (?)
712 [main] DEBUG org.hibernate.SQL - /* insert cd.itcast.hibernate.day2.many2one.Department */ insert into Department (name) values (?)
782 [main] DEBUG org.hibernate.SQL - /* load cd.itcast.hibernate.day2.many2one.Department */ select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id=?
964 [main] DEBUG org.hibernate.SQL - /* FROM Department */ select department0_.id as id1_0_, department0_.name as name2_0_ from Department department0_
974 [main] DEBUG org.hibernate.SQL - /* load one-to-many cd.itcast.hibernate.day2.many2one.Department.emps */ select emps0_.DEPT_ID as DEPT2_0_1_, emps0_.id as id1_1_1_, emps0_.id as id1_1_0_, emps0_.DEPT_ID as DEPT2_1_0_ from Employee emps0_ where emps0_.DEPT_ID=?
可以看到,hibernate会在执行CRUD等操作的时候为生成的SQL或者查询的HQL添加注释,但是还是很可惜的是,我们仍然没法看到生成SQL的参数,所以这个设置其实意义不大。
要看到hibernate输出SQL的值,个人觉得最好的方法是:
http://blog.csdn.net/stefwu/article/details/10432449