hibernate的应用中一般总是将entity映射为强类型的java类,这为程序操纵带来很多便利,同时可以将大量动态过程隐蔽在对象包络之下。映射为java类的一个主要问题在于无法在程序运行时刻对于程序进行修改,而数据结构的局部修改几乎是无法避免的。hibernate3本身支持动态数据模型,它允许我们把entity映射为Map数据类型, 当数据结构发生变化的时候, 只需要修改hbm文件即可改变映射模型,而不需要修改java实体类代码.
在hbm定义文件中,如果我们不指定name属性,而是指定entity-name属性,则我们可以将entity映射为Map, 而不是一个java实体类.
<class
entity-name="test.DynamicEntity"
table="DYNAMIC_ENTITY"
>...</class>
此外, 也可以选择将部分字段动态映射到Map
<class ...>
<dynamic-component name="dynamicAttributes">
<property name="foo" column="FOO"/>
<property name="bar" column="BAR"/>
</dynamic-component>
</class>
在HQL语句中可以直接使用o.dynamicAttributes.foo来访问foo属性,所有操作与普通属性相同。
为了实现hiberante映射模型的动态更新,我们首先需要实现sessionFactory的动态更新。目前hibernate的实现只允许从hbm文件重建sessionFactory, 即新建一个sessionFactory替换原有的sessionFactory, 在使用spring的情况下,这需要对org.springframework.orm.hibernate3.LocalSessionFactoryBean进行小小的hack。
为了将动态属性和普通属性同样对待,要求在操作实体对象属性的时候需要能够自动处理nested property, 即需要如下类似的方法:entityDao.getProperty(entity,"dynamicAttributes.foo"), entityDao.setProperty(entity,"dynamicAttributes.foo", attrValue).
为了使得应用程序自动处理新增属性,要求程序是meta驱动的:当实体对象增加了一个属性时,只需要修改meta文件,即可完成对于该属性的增删改查汇总等普通应用需求。
分享到:
相关推荐
《Hibernate动态数据库改进版》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇文章将深入探讨如何利用Hibernate实现动态数据库操作,并结合具体的实例,介绍一个...
最后,从源码角度理解Hibernate动态分表,可以查看Hibernate的SessionFactoryBuilder、SessionFactory、Session等核心类,它们在处理实体持久化时会调用到与分表相关的代码。对于自定义的分表策略,可能涉及到...
1. **Hibernate ORM框架:** Hibernate是一个流行的Java ORM框架,它提供了一种在Java应用中管理和持久化对象到关系数据库的方法,消除了直接操作SQL的需要。 2. **CRUD操作:** - **创建(Create):** 通过`...
本主题“hibernate动态映射表处理Oracle的CLOB类型”主要聚焦于如何在Hibernate中有效地管理和操作CLOB字段。在Oracle 10g中,CLOB数据类型的处理有时会遇到一些挑战,尤其是在与ORM框架结合使用时。以下将详细介绍...
【标题】:“Hibernate动态建表” 在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与Java对象模型相结合,简化了数据库编程。"Hibernate动态建表"指的是在应用运行时...
当使用Hibernate时,POJOs会被转换为持久对象,这个过程在运行时由Hibernate的CGLIB库动态完成。 JDO(Java Data Objects)是另一种ORM标准,它的实现机制与Hibernate略有不同。在JDO中,首先需要编写POJO,然后...
**Hibernate 数据持久化详解** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本篇文章将...
在这个网站实例中,"struts +hibernate 动态action"的结合展示了如何利用这两个框架构建一个动态、数据驱动的Web应用程序。 Struts是一个开源的MVC框架,它简化了Java Servlet和JSP的应用开发。在Struts中,Action...
10. **级联操作与代理**:阐述级联属性的使用,如何实现对象间的联动操作,以及Hibernate的动态代理机制。 11. **实体关联映射**:详细解析各种关联映射方式,如一对一、一对多、多对一、多对多,以及它们在实际...
《精通Hibernate:Java对象持久化技术详解》一书聚焦于Java开发中的对象持久化技术,主要围绕Hibernate这一流行ORM框架进行深入探讨。Hibernate是Java世界里的重要工具,它简化了数据库操作,使得开发者可以更加专注...
总的来说,“hibernate hql where语句拼接工具类”是为了简化和规范化在Hibernate中构建带有动态条件的HQL查询的过程,提高代码的可读性和可维护性。通过这样的工具类,开发者可以更方便地根据业务需求构建复杂的...
《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...
总的来说,仿照Hibernate动态生成SQL保存对象是一个涉及反射、注解解析、SQL构造等多个技术领域的综合实践。通过这样的方式,你可以创建一个更加灵活且适应性强的ORM框架,满足特定项目的需求。然而,需要注意的是,...
《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...
**JSP+Struts+Hibernate办公自动化管理系统** 这个系统是一个基于Java Web技术的办公自动化解决方案,采用经典的MVC(Model-View-Controller)设计模式,利用JSP、Struts和Hibernate三大技术栈来构建。这样的架构...
10. 测试实践:结合Junit4,开发者可以编写针对Hibernate应用的单元测试,检查数据持久化、查询等功能是否正确。使用@Test注解标记测试方法,@Before和@After用于测试前后的准备工作和清理。 总之,这个压缩包提供...
在本文中,我们将深入探讨如何在Java Hibernate应用中实现不同数据库之间的动态切换。 首先,我们需要理解Hibernate的核心配置文件`hibernate.cfg.xml`。在这个文件中,通常会指定数据库连接的信息,如URL、用户名...
Hibernate-Extensions提供了一种自动化方式来处理这些时间戳,比如在对象更新时自动更新某个字段,无需手动设置。 五、其他功能 除了上述特性,Hibernate-Extensions还提供了其他实用功能,如批量操作支持、动态...
4. **Criteria查询**:除了SQL和HQL(Hibernate查询语言),Hibernate还提供了`Criteria` API进行动态查询。开发者可以通过`Criteria`对象构建查询条件,无需编写字符串查询,提高了代码的可读性和可维护性。 5. **...
此外,hibernate-extensions还支持动态代理,允许我们在运行时动态地添加拦截器,实现如日志、缓存等高级功能。 **Middlegen-Hibernate** 是一个基于Maven的工具,用于将数据库的元数据转换为Hibernate的映射文件和...