碰到的一个Hibernate的问题

碰到的一个Hibernate的问题

也不知道算不算问题,只是感觉有那么一点奇怪...
在OSIV情况下编写的一个测试类,其中的代码是这样的:
1 Test test = new  Test();
2 dao.save(test);
3 Test testChild = new  Test();
4 testChild.setParent(test);
5 dao.save(testChild);
6 Test resultTest = (Test)dao.getById(Test. class , test.getId());
Test本身是个自关联,映射文件如下:
< class
       
name ="dataset.component.metadata.display.Test"
       table
="T_Test"
       dynamic-update
="true"
   
>

       
< id
           
name ="id"
           column
="id"
           type
="int"
       
>
           
< generator  class ="native" >
           
</ generator >
       
</ id >

       
< set
           
name ="childs"
           table
="T_Test"
           lazy
="true"
           cascade
="delete"
           sort
="unsorted"
       
>

           
< key
               
column ="parentId"
           
>
           
</ key >

           
< one-to-many
                 
class ="dataset.component.metadata.display.Test"
           
/>

       
</ set >

       
< many-to-one
           
name ="parent"
           class
="dataset.component.metadata.display.Test"
           cascade
="none"
           outer-join
="auto"
           update
="true"
           insert
="true"
           column
="parentId"
       
/>

   
</ class >

因为是open session in view,所以session是在代码执行完毕后关闭的;
在这种情况下执行resultTest.getChilds()返回的是null。
调试的时候dao.getById执行完毕后取回的resultTest和之前的test是同一个对象,hashcode都是一样的..
于是便尝试在dao.getById之前把session关闭,这个时候再执行发现resultTest.getChilds()就是正确的了..
总结,就是在同一个session内如果save了一个对象,再通过session.load的方式去取这个对象取出的将仍然是当前session中的对象,也就是说不会去数据库中重新获取...
怎么感觉这样是不太对的,明明数据库有改变,却没有去重新的加载...
但因为open session in view是这么做的,所以现在干脆测试的时候就使用另外一个dao了,唯一的不同就是这个dao会即时的关闭session,大家有没有别的什么好建议,^_^

你可能感兴趣的:(碰到的一个Hibernate的问题)