Hibernate的动态模型为我们动态改动表结构带来了方便, 个人认为这一点非常有价值, 现在的企业级应用系统越来越强调用户可定制性, hibernate的这一点使用户自定义字段或自定义表成为可能 .
Hibernate也支持动态模型 (在运行期使用Map
的Map
)和象DOM4J的树模型那 样的实体表示。使用这种方法,你不用写持久化类,只写映射文件就行了。
在映射文件中用entity-name
看一个例子
xml 代码
-
<hibernate-mapping>
-
<!-- 这里class里面用的是entity-name,没有创建持久化类,也就是实体类 -->
-
<class entity-name="org.tie.User" table="user" catalog="tie">
-
<id name="id" type="long">
-
<column name="id" />
-
<generator class="identity" />
-
</id>
-
<property name="name" type="string">
-
<column name="name" length="45" not-null="true" />
-
</property>
-
<property name="email" type="string">
-
<column name="email" length="45" />
-
</property>
-
<property name="addr" type="string">
-
<column name="addr" length="45" />
-
</property>
-
</class>
-
</hibernate-mapping>
测试的例子
java 代码
-
public void testCreate(){
-
Map user = new HashMap();
-
user.put("name", "zhongguoren");
-
user.put("email","zhongguoren@163.com");
-
user.put("addr","zhongguobeijing");
-
-
Session session = factory.openSession();
-
Transaction tr = session.beginTransaction();
-
//这里的save比较特别点
-
session.save("org.tie.User", user);
-
tr.commit();
-
session.close();
-
-
-
}
-
-
public void testRetrieve(){
-
Session session = factory.openSession();
-
//查找通过这样的查找
-
Map user = (Map)session.load("org.tie.User", new Long(4));
-
System.out.println(user.get("email"));
-
session.close();
-
}