有关hibernate中update方法的问题

有关hibernate中update方法的问题(no session 和 session flush)

在我们的第一个项目wenice中,因为用到了compass来建立索引。

而compass配置的hibernateGPS会跟踪hibernate的update、delete、save等方法。然后同步到你所建立的index索引中。

而实际中遇到了这样的问题,update会出现no session和session flush问题。

经过多次跟踪,发现是hibernate配置文件中的配置错误,其中one-to-one和many-to-one有问题。

 

具体原因不清楚,猜测可能是,hibernate更新之后,相关联的对象存在内存中有多个吧。才导致的上述两个问题。

 

后来得到的解决办法是在hibernate对象A的update方法中,先将A配置文件中one-to-one对象B和many-to-one的对象C,先在update方法之前手动new一个,然后取出A中B和C;这时候其中的相关内容都为空;可以采用java的克隆;即clone;如果B,C中还有其他懒加载的对象,需要采用深度克隆。具体方法如下:

class A implements Cloneable{
public int aInt;

public B b;
public Object clone(){
Ao = null;
try{
o = (A)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}

o.b= (B)b.clone();

return o;
}

class B implements Cloneable{
public int aInt;
public Object clone(){
B o = null;
try{
o = (B)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}

class C implements Cloneable{
public int aInt;
public Object clone(){
C o = null;
try{
o = (C)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}

这样便基本解决了上述两个问题。

留下来,以后会用到吧……或者回来看看


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值