论坛首页 Java企业应用论坛

Hibernate的动态模型

浏览 7032 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-07-10  

 

 

 

简介

      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();

 

 

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

 

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

 

 

 

 

   发表时间:2011-07-10  
不错。又甩开了JPA一步。
0 请登录后投票
   发表时间:2011-07-11  
我突然想不明白java为什么要引入泛型了
0 请登录后投票
   发表时间:2011-07-12  
感觉和MyBatis有点相似了
0 请登录后投票
   发表时间:2011-07-12  
    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); 
    // 运行结果: <em>Hibernate: insert into PersonEntity (age, name) values (?, ?)</em> 
     
    session.getTransaction().commit(); 
    session.close(); 
--------------
嗯,这段代码很不错,反正计算机不会抱怨。
0 请登录后投票
   发表时间:2011-07-12  
truekbcl 写道
    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); 
    // 运行结果: <em>Hibernate: insert into PersonEntity (age, name) values (?, ?)</em> 
     
    session.getTransaction().commit(); 
    session.close(); 
--------------
嗯,这段代码很不错,反正计算机不会抱怨。


? 抱怨什么? 这个代码很正常的吧?
0 请登录后投票
   发表时间:2011-07-12  
运行效率低下。
0 请登录后投票
   发表时间:2011-07-12  
ray_linn 写道
运行效率低下。

断言?
。。。 不发表意见、 没有测试过效率
0 请登录后投票
   发表时间:2011-07-12  
s929498110 写道
ray_linn 写道
运行效率低下。

断言?
。。。 不发表意见、 没有测试过效率


明摆着要造型的玩意儿。。
0 请登录后投票
   发表时间:2011-07-13  
aa87963014 写道
我突然想不明白java为什么要引入泛型了

是啊,Java想尽可能的规范类型,防止出错,但人就是喜欢不受约束。要不然怎么说JS是那么的灵活,那么受欢迎呢。以后的语言向什么方向发展呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics