Hibernate的动态模型

简介

      Hibernate中持久化实体没有必要一定是POJO或者JavaBean对象。 Hibernate也支持动态模型进行持久化实体和数据库之间的映射。 官方文档(3.6)说“此功能正在试验中,也许会在未来版本中发生变化”,现在4.0也出了, 不知道是否发生了变化

      动态模型就是完全抛弃了 Java 类的定义, 仅仅定义映射文件即可, 然后在程序中直接使用 Map 进行实体的操作(有一点像结构体那样额。。。)。

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

实例:

比如需要一个Person类

package chapter4.model;

public class Person {

	private int id;
	private int age;
	private String name;

	// setter、getter省略

}

如果使用动态映射的话,就不需要再编写这个Person类, 只需要编写一个动态映射XML即可

<hibernate-mapping>
	<!-- 此处不需要类名,和包名 -->
	<class entity-name="PersonEntity" table="person_entity">
		<id name="id" type="integer">
			<generator class="native"/>
		</id>
		<property name="age" type="integer"/>
		<property name="name" type="string"/>
	</class>
</hibernate-mapping>

然后在程序中直接使用Session进行通过Map进行实体操作:

SessionFactory sf = HibernateUtil.SF;
Session session = sf.getCurrentSession();
session.beginTransaction();
// 通过Map映射实体与数据库
Map test = new HashMap();
test.put("age", new Integer(20));
test.put("name", "动态映射测试");
session.save("PersonEntity", test);
// 运行结果: Hibernate: insert into PersonEntity (age, name) values (?, ?)

session.getTransaction().commit();
session.close();

问题是通过动态映射存入数据方便了点, 但是从数据取出数据好像比较难以操作额。

不知道有没有人具体用过这个功能??? 

猜你喜欢

转载自sulin.iteye.com/blog/1120866