文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Hibernate动态模型是什么

2023-06-17 20:57

关注

这篇文章主要介绍“Hibernate动态模型是什么”,在日常操作中,相信很多人在Hibernate动态模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate动态模型是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Hibernate动态模型(Dynamic models)

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

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

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

下面是用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能容易的规格化和合理化,并允许稍后在此之上添加合适的领域模型实现。

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

Session dynamicSession = pojoSession.getSession(EntityMode.MAP);   // Create a customer  Map david = new HashMap();  david.put("name", "David");  dynamicSession.save("Customer", david);  ...  dynamicSession.flush();  dynamicSession.close()  ...  // Continue on pojoSession

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

到此,关于“Hibernate动态模型是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯