热门关键字: 编程 jsp web pl/sql pl   →开发工具  操作系统
当前位置 : 无忧IT编程网 > J2EE开发 > Hibernate > 正文

Hibernate 的自定义表单_实现方案

时间:07-10-26

Hibernate 的自定义表单_实现方案

关于自定义表单网上讨论的很多,个人比较偏向于基于Hibernate的解决方式,原因很简单,如果能够将用户自定义的字段信息通过Hibernate的方式存储,

那么具备了Hibernate所带来的一切方便,比如:跨数据库等等。 
但是有难度: 
1、我们通常是先写一个静态的POJO,然后把它的属性映射到数据库表,那么,在字段不确定的情况下,如果把这些不确定的字段映射到数据库呢?

当然可以通过cglib或javassist等等字节码工具动态生成class文件。 
2、我们知道Hibernate是在服务器启动的时候,根据hbm映射文件创建表,那么在我们启动时候并不知道表信息的时候,如果在运行时,创建表呢? 
第一个问题答案: 
我们不一定要做POJO到数据库的映射,Hibernate的实体类型也可以是xml文档、Map,也就是说我们可以用户的表单信息做为xml文档或则Map提交给Hibernate处理。 
第二个问题答案: 
通过分析Hibernate源代码,我们可以在服务器运行中,请求Hibernate动态创建表,代码如下: 
从 SessionFactory中拿到配置信息(不要去创建新的实例),增加HBM映射文件到Configuration ,请求Hibernate更新数据库。


代码

public class CustomAction extends BaseAction{   
    
 public String execute() throws MappingException, IOException{   
  SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) Service.getService("sessionFactory");   
  LocalSessionFactoryBean localSessionFactory = (LocalSessionFactoryBean) Service.getService("&sessionFactory");   
  // 从localSessionFactory拿到配置信息Configuration ,并且增加HBM映射文件到Configuration    
  Configuration config = localSessionFactory.getConfiguration();   
  Resource mappingLocation = new ClassPathResource("custom.hbm.xml");   
        config.addInputStream(mappingLocation.getInputStream());   
       // 从SessionFactory中拿到属性配置信息   
        Settings settings = sessionFactory.getSettings();   
           
        //   请求 Hibernate 创建表   
        if ( settings.isAutoUpdateSchema() ) {   
             new SchemaUpdate( config, settings ).execute( false, true );   
        }   
      return super.SUCCESS;   
 }   
}   

上一篇:Hibernate获得成功的十大理由
下一篇:没有了
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 验证码: 验证码
查看所有评论
站长推荐