Hibernate的动态化
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属性,所有操作与普通属性相同。
使用公式的细节
使用公式的映射文件写法
可以使用函数,也可以使用SQL
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="domain.Users" table="users" catalog="blogs">
<id name="uid" type="java.lang.Integer">
<column name="uId" />
<generator class="native" />
</id>
<property name="ufirst" type="java.lang.String">
<column name="uFirst" />
</property>
<property name="usecond" type="java.lang.String">
<column name="uSecond" />
</property>
<property generated="insert" name="uinfo" formula="(select concat(u.uFirst,u.uSecnod) from users u where u.uId = uid)"/>
<property name="checkScore" formula="fGetCheckScore(uid)"/>
</class>
</hibernate-mapping>
细节1.既然@Formula 是一个虚拟列,那么数据库中不需要建这一列,同样可以,如果有个列存在,hibernate也会将 其忽略。以上示例中的user就没有count列。
细节2.sql语句必须写在()中,这个以前也有人说过。
细节3.如果有where子查询,那么表需要用别名,比如 select COUNT(*) from user where id=1 是错的
而select COUNT(*) from user u where u.id=1是正确的
细节4.只要是你在数据库的sql控制台执行过的语句,并且使用了表别名,那么@Formula都应该是支持的。
确实formula是一个很常用且好用的东西!
分享到:
相关推荐
hibernate 资料hibernate 资料hibernate 资料hibernate 资料
hibernate3hibernate3hibernate3hibernate3hibernate3hibernate3hibernate3hibernate3
Hibernate.jar包,Hibernate可以应用在任何使用JDBC的场合,包含 hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-...
hibernate annotation hibernate3
hibernate教程hibernate教程hibernate教程
hibernate5 hibernate PDF 讲义 动力 hibernate ssh hibernate5 节点
hibernate 5.2.15 hibernate 5.2.15 hibernate 5.2.15 hibernate 5.2.15 hibernate 5.2.15hibernate 5.2.15
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate...
DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-hibernate4.0、DmDialect-for-hibernate5.0、...
Hibernate面试题专栏 - 最全的Hibernate面试题, Hibernate笔试题, Hibernate问题 Hibernate教程
hibernate 实战 hibernate 实战 hibernate 实战 hibernate 实战
Hibernate连接SQLite配置步骤: 1、添加SQLite库: 1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将...
包含hibernate所有所需jar包还有一些其他包日志包、jpa支持包等: 列如:hibernate-core-5.1.0.Final.jar hibernate-ehcache-5.1.0.Final.jar hibernate-entitymanager-5.1.0.Final.jar hibernate-envers-5.1.0....
Manning出版 Java Persistence With Hibernate 第二版 清晰pdf Hibernate, an open source project that is almost 15 years old. In a recent poll, Hibernate was among the top five tools used by many Java ...
hibernate第一个hibernate
Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板Hibernate留言板
HIBERNATE HIBERNATE HIBERNATE HIBERNATE
hibernate 用的较频繁的jar包,或者文档
ejb+hibernate资料 ejb+hibernate资料 ejb+hibernate资料 ejb+hibernate资料
hibernate实战 英文版 最权威的hibernate著作 快来下载吧