如果您有几个表格,当中有一些类似的字段,例如T_USER1有name字段与age字段,而T_USER2也有name字段与age字段,按照正常的作法,您也许会为两个表格分别设计User1与User2类别来加以对应。
然而透过entity-name的属性设定,您可以将一个类别对应至多个表格,例如:
• User.hbm.xml
<?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="onlyfun.caterpillar.User"
entity-name="User1Entity"
table="T_USER1">
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<property name="name" column="name" />
<property name="age" column="age" />
</class>
<class name="onlyfun.caterpillar.User"
entity-name="User2Entity"
table="T_USER2">
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<property name="name" column="name" />
<property name="age" column="age"/>
</class>
</hibernate-mapping>
在映射文件中,T_USER1与T_USER2的映射类别都是User类别,藉由entity-name的不同,可以知道该将资料储存至哪一个表格:
User user = new User();
user.setName("caterpillar");
user.setAge(new Long(30));
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx= session.beginTransaction();
// 储存至T_USER1
session.save("User1Entity", user);
tx.commit();
session.close();
user = new User();
user.setName("justin");
user.setAge(new Long(32));
session = HibernateUtil.getSessionFactory().openSession();
tx= session.beginTransaction();
// 储存至T_USER2
session.save("User2Entity", user);
tx.commit();
session.close();
查询时也是藉由指定entity-name来取得对应的表格数据,并封装为User实例,例如以下会取得T_USER1中的资料:
User user = (User) session.load("User1Entity", new Long(1));