Hibernate 配置详解(10)

来源:互联网 发布:室内设计书籍 知乎 编辑:程序博客网 时间:2024/05/20 16:43

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


原创粉丝点击