目前有一个需求,有一个业务功能,需要在不同的公司的系统查询出结果数据,然后汇总,由于模型的不统一,所以我们要在线定义模型。
初步方案是每个系统建一套模型,配置文件和hibernate映射文件都存在一个公共数据库里面,使用hibernate的动态模型(Dynamic models)来在线定义模型。
请问有用过Dynamic models的吗?谈谈Dynamic models好用不?参考手册上说目前还是实验阶段。

解决方案 »

  1.   

    应该不好用,我也没用过
    Struts1有个动态Form,那叫一个云里雾里啊,很容易混乱
      

  2.   

    struts1的Dynamic form很好用的,我经常用。
      

  3.   

    运行期的持久化实体没有必要一定表示为像POJO类或JavaBean对象那样的形式。Hibernate也支持动态模型(在运行期使用Map的Map)和象DOM4J的树模型那样的实体表示。使用这种方法,你不用写持久化类,只写映射文件就行了。 Hibernate默认工作在普通POJO模式。你可以使用配置选项default_entity_mode, 对特定的SessionFactory,设置一个默认的实体表示模式。
    下面是用Map来表示的例子。首先,在映射文件中,要声明 entity-name来代替一个类名(或作为一种附属)。 
    <hibernate-mapping>      <class entity-name="Customer">          <id name="id"             type="long"             column="ID">             <generator class="sequence"/>         </id>          <property name="name"             column="NAME"             type="string"/>          <property name="address"             column="ADDRESS"             type="string"/>          <many-to-one name="organization"             column="ORGANIZATION_ID"             class="Organization"/>          <bag name="orders"             inverse="true"             lazy="false"             cascade="all">             <key column="CUSTOMER_ID"/>             <one-to-many class="Order"/>         </bag>      </class>       </hibernate-mapping> 注意:虽然是用目标类名来声明关联的,但是关联的目标类型除了是POJO之外,也可以 是一个动态的实体。 在使用dynamic-map为SessionFactory 设置了默认的实体模式之后,可以在运行期使用Map的 Map。 
    Session s = openSession();  Transaction tx = s.beginTransaction();  Session s = openSession();   // Create a customer  Map david = new HashMap();  david.put("name", "David");   // Create an organization  Map foobar = new HashMap();  foobar.put("name", "Foobar Inc.");   // Link both  david.put("organization", foobar);   // Save both  s.save("Customer", david);  s.save("Organization", foobar);   tx.commit();  s.close(); 动态映射的好处是,变化所需要的时间少了,因为原型不需要实现实体类。然而,你无法进行 编译期的类型检查,并可能由此会处理很多的运行期异常。幸亏有了Hibernate映射,它使得数 据库的schema能容易的规格化和合理化,并允许稍后在此之上添加合适的领域模型实现。
     
      

  4.   

    动态模型只是不像POJO类或JavaBean对象那样的形式,我觉得不用区别对待吧,不过偶没有用过。。
      

  5.   

    这个新特新还没用过。我提一个思路:
      
        通过用户的在线定义模型,在后台用DOM动态生成hibernate的映射文件xxx.hbm.xml,然后再修改spring或hibernate.cfg.xml文件,至于对应的java模型文件吗,这个动态生成文件好像很难,不知道可不可以,我没弄过。这中业务没有遇到过,个人意见不知道对你有没有用。
      

  6.   


    恩,也曾经有这个想法,动态pojo的生产可以io写源代码,Runtime.getRuntime().exec来编译class,反射来加载类。不过感觉有点蹩脚,太非主流了
      

  7.   

    Query.setResultTransformer
     
    ResultTransformer->AliasToBeanConstructorResultTransformer, AliasToBeanResultTransformer想怎么映射就怎么射。有没有认真看过 Hibernate API 文档?
      

  8.   

    这种多系统数据汇总 为什么不用XML形式组织数据 规定了格式 每个系统就按这种格式提供数据 不管各个系统内部怎么个结构
      

  9.   

    能用 iBatis 么?直接写 SQL 想查哪张表的数据就查哪张表。
      

  10.   

    如果有规定的格式,也就不需要我们来做这个业务了,就是没有统一的规定,所以我们要做的就是一个适配器的作用。如果用ibatis,以后加了新系统,又要写代码