CREATE TABLE user ( id INT(11) NOT NULL auto_increment PRIMARY KEY, name VARCHAR(100) NOT NULL default '', age INT );使用动态模式来作映像时,无需定义Java对象,直接在映像文件的<class>卷标上使用entity-name属性:
<?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 entity-name="onlyfun.caterpillar.DynamicUserModel"
table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name"
column="name"
type="java.lang.String"/>
<property name="age"
column="age"
type="java.lang.Integer"/>
</class>
</hibernate-mapping>
Map userMap = new HashMap(); userMap.put("name", "caterpillar"); userMap.put("age", new Integer(30)); Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); session.save("onlyfun.caterpillar.DynamicUserModel", userMap); tx.commit(); session.close();Map容器的key用来表示属性名称,而value用来表示储存之对象,它们将对应至数据表中的字段与值,上面的程序片段储存数据后,数据表内容如下:
mysql> select * from user; +----+-------------+------+ | id | name | age | +----+-------------+------+ | 1 | caterpillar | 30 | +----+-------------+------+ 1 row in set (0.00 sec) |
Session session = sessionFactory.openSession(); Map userMap = (Map) session.load("onlyfun.caterpillar.DynamicUserModel", new Integer(1)); System.out.println(userMap.get("name")); System.out.println(userMap.get("age")); session.close();Hibernate 3引入动态模型的目的,在于更灵活的构造原型系统,在系统架构与对象模式确定之后,仍是要设计专用的Java对象,以获得编译时期的型态检查等好处。