Posted on 2006-07-23 21:13
canonical 阅读(5063)
评论(8) 编辑 收藏 所属分类:
软件开发
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文件,即可完成对于该属性的增删改查汇总等普通应用需求。
Feedback
# re: Hibernate动态化 回复 更多评论
2006-09-16 22:24 by
嘿嘿,和我想的事情素一模一样的亚!
# re: Hibernate动态化 回复 更多评论
2006-09-18 00:30 by
嗯,我们对hiberante作了一些扩展,包括支持公式字段,附件上传字段等
# re: Hibernate动态化 回复 更多评论
2006-10-11 15:05 by
有个问题:使用 Map,能够实现 lazy load 吗
# re: Hibernate动态化 回复 更多评论
2007-11-09 15:17 by
能再详细点该有多好啊 唉~
# re: Hibernate动态化 回复 更多评论
2008-03-17 20:17 by
<hibernate-mapping>
<class name="hib.TtItem" table="TT_ITEM" schema="SCOTT">
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="80" />
</property>
<joined-subclass entity-name="Ttbook">
<key column="aid" />
<property name="ttt" type="java.lang.String"></property>
</joined-subclass>
</class>
</hibernate-mapping>
有没有试验过这样的配置文件
# re: Hibernate动态化 回复 更多评论
2008-03-17 20:17 by
我的email:yeti20022@hotmail.com
# re: Hibernate动态化 回复 更多评论
2010-08-02 16:11 by
能详细点吗,能举个列子在spring+hibernate 中动态化具体实现过程
# re: Hibernate动态化[未登录] 回复 更多评论
2010-08-19 14:45 by
能举个例子在spring+hibernate中动态化的列子吗?