manjuhaha
2009-04-15 16:16
浏览 239
已采纳

javassist hibernate 应用问题

需求:
1、当服务启动时,根据hbm.xml动态创建相应的pojo,并不是生成.java或.class,是用javassist动态创建的。(已经完成)
2、根据前台请求,先修改对应的hbm.xml,用的是dom4j,然后动态去修改前面动态生成的pojo,这个也是用javassist改的,但是在修改的最后,toClass()的时候抛出异常,说是存在同一个类。这时候我就没有继续toClass(),然后用ClassPool获得了修改后的pojo,检测了一下修改的情况,确实是修改好了,添加上了该添加的字段。这时候,相应的hbm.xml和pojo都已经修改好了,按说如果我重新rebuildsession后,再用hql查询这个pojo的话,对应动态添加的这个字段应该是null。
这时候问题出现了:
我查询出的pojo仍然是以前未修改的那个,新生成的字段并没有出现。并且我在hibernate.cfg.xml里面配置了update,按道理数据库的表中也应该自动生成相应的字段,这时候也没有生成。

我分析是我动态修改的类没有和session再次绑定,所以session里面还是以前的那个类;第二,数据库表没有生成相应的字段,就是因为configuration.configure(filename)好像带了缓存,它根本就不读修改后的hbm.xml(这个我做了个实验,在运行时我把hbm.xml删了,可是没反应)。
我想不出办法解决,请诸位帮忙,谢谢!

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • johnhan2012 2009-04-16 00:06
    已采纳

    你在POJO对应的hbm.xml的class标签中加入catalog属性再试试,
    catalog的值是你数据库名称。
    eg:

    ……
    ……

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题