论坛首页 Java企业应用论坛

Hibernate自定义表单完全解决方案(无需重置SessionFactory)

浏览 53114 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-05-30  
楼上的,先不说其他,以后添加映射关系,比如一对一 一对 多等,还是 pojo和 hbm.xml的功能最全吧
何况还有动态数据查询,如果是全自定义的动态查询,就我目前来看,还是针对  pojo最方便呀

再说动态修改的问题,是可以实现的
其实就是删除  修改的问题 ,先删除掉当前 环境下的 PersistentClass定义,再添加进去就是,如果担心中间有冲突,可以比如在更新时候对openSession方法加事件锁都可以的
0 请登录后投票
   发表时间:2008-05-30  
很不错
不过改写hibernate代码在法律和维护方面都有问题
而SessionFactoryImpl类还是final的,不可继承
在外边写一个方法,用反射得到SessionFactoryImpl对象的allCacheRegions, entityPersisters, identifierGenerators, properties进行操作,会不会更好一些?
0 请登录后投票
   发表时间:2008-05-30  
hibernate的final关键字有时确实非常麻烦,类 FINAL,变量也FINAL
造成很多的不方便,比如 DetachedCriteria很多变量都是final,导致用hessian传输会出问题
0 请登录后投票
   发表时间:2008-05-30  
asm用的那个版本的包了?这边一直冲突
0 请登录后投票
   发表时间:2008-05-30  
jacklondon 写道
"最近开发的一个系统,需要在不更改代码和重启系统的情况下提供对用户自动建表的支持"----就冲这句话,很多时候就可以直接枪毙掉这个系统了。

很多内容管理系统的设计思路都是基于表结构的变化来适应复杂的非结构化数据的,像IBM的CM,EMC2的Documental(可能拼错了),相比于扩展属性的表结构设计,大数据量的情况下动态建表的方法可以减少数据行数。也更利于优化查询
0 请登录后投票
   发表时间:2008-05-30  
这个功能,困扰了我很久,谢谢兄弟的,无私奉献
0 请登录后投票
   发表时间:2008-05-30  
jacklondon 写道
"最近开发的一个系统,需要在不更改代码和重启系统的情况下提供对用户自动建表的支持"----就冲这句话,很多时候就可以直接枪毙掉这个系统了。


你认为是DBA维护表比较麻烦嘛?

还有lz能说一下如果你的动态实体类需要修改怎么办?
0 请登录后投票
   发表时间:2008-06-05  
这个方法不错。有2个不错的地方:
一是用ASM动态生成class这一出发点。
二是无需重置SessionFactory的实现上。

关动态实体的修改如何做,不知道楼主是如何在你这里面集成进来的。网上常用的方法是基于dynamic-component的实现方式,那样的实现实在是很让人不爽,所有的model都得extends一个CustomizableEntity。

结合你的这个思路,我想是否可以这样处理:
1. 用ASM或cglib实现动态的创建,修改。 - 这里会带来一个新的问题,扩展classloader以实现对修改类的重加载
2. XML语法解析器,用于新增及修改hbm文件。 - 这会不同于你的模版机制的生成方式,我想在hibernate中会有相关处理类,我们要做的也许是对这个已有类做相关扩展
3. 你现有的这个SessionFactoryImpl.addPersistentClass,他的功能要做相关扩展了,不光是能新增persisstent class,还应包括修改了。
4. serialize问题,系统停机再重启,将修改再次运用上去。

另,代为回答,关于为什么有这样的应用:
在业务系统中,动态新增单据,及修改单据字段是最常见的。
0 请登录后投票
   发表时间:2008-06-05  
关于动态修改的问题,我这里有个变通方案,在只能说能用 ,远谈不上好 。
因为我们知道 ,要实现动态加载类,必须用不同的classloader
而hibernate会首先从线程上下文的loader加载,然后才是Class.forName
如果基于hibernate这种现成加载机制,确实很难实现动态修改class然后立即生效。

详细情况我会开帖描述
0 请登录后投票
   发表时间:2008-06-12  
在建表的过程序。突间断电,怎么办?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics