Hibernate动态模型(Dynamicmodels)详解

本文向大家介绍Hibernate动态模型(Dynamic models),可能好多人还不了解Hibernate动态模型(Dynamic models),没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

成都创新互联是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的10年时间我们累计服务了上千家以及全国政企客户,如生料搅拌车等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致称誉。

Hibernate动态模型(Dynamic models)

注意:以下特性在当前处于试验阶段,将来可能会有变化。

运行期的持久化实体没有必要一定表示为像POJO类或JavaBean对象那样的形式。Hibernate也支持动态模型(在运行期使用Map的Map)和象DOM4J的树模型那样的实体表示。使用这种方法,你不用写持久化类,只写映射文件就行了。

Hibernate默认工作在普通POJO模式。你可以使用配置选项default_entity_mode, 对特定的SessionFactory,设置一个默认的实体表示模式。 (参见表 3.3 “ Hibernate配置属性 ”。)

下面是用Map来表示的例子。首先,在映射文件中,要声明 entity-name来代替一个类名(或作为一种附属)。

 
 
 
  1.      entity-name="Customer">
  2.          name="id"
  3.             type="long"
  4.             column="ID">
  5.              class="sequence"/>
  6.         
  7.          name="name"
  8.             column="NAME"
  9.             type="string"/>
  10.          name="address"
  11.             column="ADDRESS"
  12.             type="string"/>
  13.          name="organization"
  14.             column="ORGANIZATION_ID"
  15.             class="Organization"/>
  16.          name="orders"
  17.             inverse="true"
  18.             lazy="false"
  19.             cascade="all">
  20.              column="CUSTOMER_ID"/>
  21.              class="Order"/>
  22.         
  23.     
  24.     

注意:虽然是用目标类名来声明关联的,但是关联的目标类型除了是POJO之外,也可以 是一个动态的实体。

在使用dynamic-map为SessionFactory 设置了默认的实体模式之后,可以在运行期使用Map的 Map。

 
 
 
  1. Session s = openSession();
  2. Transaction tx = s.beginTransaction();
  3. Session s = openSession();
  4. // Create a customer
  5. Map david = new HashMap();
  6. david.put("name", "David");
  7. // Create an organization
  8. Map foobar = new HashMap();
  9. foobar.put("name", "Foobar Inc.");
  10. // Link both
  11. david.put("organization", foobar);
  12. // Save both
  13. s.save("Customer", david);
  14. s.save("Organization", foobar);
  15. tx.commit();
  16. s.close();

动态映射的好处是,变化所需要的时间少了,因为原型不需要实现实体类。然而,你无法进行 编译期的类型检查,并可能由此会处理很多的运行期异常。幸亏有了Hibernate映射,它使得数 据库的schema能容易的规格化和合理化,并允许稍后在此之上添加合适的领域模型实现。

实体表示模式也能在每个Session的基础上设置:

 
 
 
  1. Session dynamicSession = pojoSession.getSession(EntityMode.MAP);
  2. // Create a customer
  3. Map david = new HashMap();
  4. david.put("name", "David");
  5. dynamicSession.save("Customer", david);
  6. ...
  7. dynamicSession.flush();
  8. dynamicSession.close()
  9. ...
  10. // Continue on pojoSession

请注意:用EntityMode调用getSession()是在 Session的API中,而不是SessionFactory。 这样,新的Session共享底层的JDBC连接,事务,和其他的上下文信 息。这意味着,你不需要在第二个Session中调用 flush()和close(),同样的,把事务和连接的处理 交给原来的工作单元。

关于XML表示能力的更多信息在XML映射中找到,这里我们就不加以介绍了。

本文标题:Hibernate动态模型(Dynamicmodels)详解
本文地址:http://www.36103.cn/qtweb/news3/24453.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联