关于hibernate3 中bulk delete/update与缓存同步问题
小弟最近刚学hibernate,看的是深入浅出hibernate一书。里面碰到一些关于缓存的问题。
建了个简单的表测试 User 里面的字段只有 id 和 name
其中操作User类中(OperatorUser类)有个删除User的方法和获取User的方法如下
//删除User
//获取userSystem.out.println(user.getName());的时候,就要真正去数据库中取了,然后就会抛出没有相应的列的异常了。
数据库没数据是我估计的,说的不一定对。 2 楼 taupo 2008-09-02 因为load方法是延时加载,你用get就会马上抛出异常了 3 楼 lchlrb 2008-09-02 恩,谢谢两位的指点,再在网上查了下关于session.load方法的信息,的确是关于load方法延迟加载的问题,而和缓存没有多大关系,因为两次运行,无论是sessionfactory还是session,两次都不同。
关于session.load():
1. load方法会先从内部缓存和二级缓存中查找实体对象,看看缓存中是否存在该对象。session.get()方法也一样。
2. hibernate中的load方法的加载方式是延迟加载, 返回的是一个实体对象的代理实例,,此时的代理类实例是由运行时动态生成的类,该代理类实例包括原目标对象的所有属性和方法,该代理类实例的属性除了ID不为null外,所在属性为null值,当调用getXXX()方法时,才会真正地到数据库里获得属性值。所以第二次再执行时,会抛出异常!
谢谢两位的指点。