UserBean 里面根本就没有 xxx1 和 xxx2而且父类不能转化为子类,所以你的问题没办法解决,谁让你用 UserBean父类呢!另,既然你的GoodsBean只关心UserBean, 你为何要xxx1和xxx2呢,这是自相矛盾的设计!把xxx1和xxx2 放到 UseBean里面算了。

解决方案 »

  1.   

    实际对应的不是一个UserBean用户,而是SuperUserBean1或者   SuperUserBean2你是怎么保证的?这取决于你的数据库结构了。 hibernate 在重新从数据库读取数据的时候,只会生成UserBean, 他可不知道你要的是1,还是2
      

  2.   

    可是如果我不用懒加载,也就是lazy=false,hibernate会直接返回SuperUserBean1对象阿
      

  3.   

    这个问题是因为hibernate在去除GoodsBean对应的userbean时并不是取出真正的userBean,甚至就不是userBean,也不是他的子类,而是他动态生成的proxy,这个就是为什么处产生classCastException的原因。prxoy只包含id。在transaction里调用其他属性,可以得到一个初始化后的实例。
    有以下几个办法可以试试:
    1 用String id = goodsbena.getUb().getId();然后用这个id去真正正的get()一个UserBean.
    2 Hibernate 提供了一个静态方法初始化,比如Hibernate.initialize(goodsBean.getUd());以后就可以正常使用了。
      

  4.   

    initialize也必须在transaction中被调用。
      

  5.   

    Hibernate.initialize(goodsBean.getUd())这个我早就试过了,不起作用。我的session不关也是这样
      

  6.   

    你取出goodsBean以后在同一个transaction中调用了Hibernate.initialize吗?
    还有一个办法,就是使用Hql或者Criteria,比如:from GOODSBEAN_TABLE goodsBean left jion fetch goodsBean.ub
    你试试看
      

  7.   

    谢谢。我取数据的过程中并没有使用事务。每次都要生成特殊的hql语句太麻烦了。