需求:
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删了,可是没反应)。
我想不出办法解决,请诸位帮忙,谢谢!