hibernate 各种映射的配置文件总结

1.多对一单向映射(User-Group) 

Group.hbm.xml文件如下: 

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.Group" table="t_group"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
</class> 
</hibernate-mapping> 
User.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.User" table="t_user"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<property name="password"/> 
<property name="createTime"/> 
<many-to-one name="group" column="groupid"/> 
</class> 
</hibernate-mapping> 


2.多对多双向映射(User<-Role)

User.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.User" table="t_user"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<property name="password"/> 
<property name="createTime"/> 
<set name="roles" table="t_user_role"> 
<key column="userid"/> 
<many-to-many class="com.dragon.hibernate.Role" column="roleid"/> 
</set> 
</class> 
</hibernate-mapping> 
Role.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.Role" table="t_role"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<set name="users" table="t_user_role"> 
<key column="roleid"/> 
<many-to-many class="com.dragon.hibernate.User" column="userid"/> 
</set> 
</class> 
</hibernate-mapping> 


3.多对多单向映射(User<-Role)

在User端使用set 引用role 维持关系,则User.hbm.xml文件同上面的双向一样,只有Role.hbm.xml文件稍微有所小小的不同,比双向更简单。
Role.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.Role" table="t_role"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
</class> 
</hibernate-mapping> 


4.一对一主键双向(Person?-> IdCard)

Person.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.Person" table="t_person"> 
<id name="id"> 
<generator class="foreign"> 
<param name="property"> idcard</param> 
</generator> 
</id> 
<property name="name"/> 
<one-to-one name="idcard" constrained="true"/> 
</class> 
</hibernate-mapping> 
Idcard.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.IdCard" table="t_idcard"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="idno"/> 
<one-to-one name="person"> </one-to-one> 
</class> 
</hibernate-mapping> 
One-to-one标签指示hibernate如何加载关联对象,默认是根据主键加载;
constrained="true"表示当前主键存在一个约束,person的主键作为外键参照idcard。 


5.一对一主键单向(Person--> IdCard) 

Person.hbm.xml文件如下相同
Idcard.hbm.xml文件如下: 

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.IdCard" table="t_idcard"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="idno"/> 
</class> 
</hibernate-mapping> 
与双向的只是少了这句<one-to-one name="person"> </one-to-one> 


6.一对一外键单向(Person--> IdCard)
IdCard.hbm.xml文件如下: 

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.IdCard" table="t_idcard"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="idno"/> 
</class> 
</hibernate-mapping> 
Person.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.Person" table="t_person"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<many-to-one name="idcard" column="idcardid" unique="true"/> 
</class> 
</hibernate-mapping> 

7.一对一外键双向(Person<--> IdCard)
Person.hbm.xml文件与单向一样
IdCard.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.Person" table="t_person"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<one-to-one name="person" proper-ref=“idcard”/> 
</class> 
</hibernate-mapping> 


8.一对多单向(Group--> User)

Group.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.dragon.hibernate"> 
<class name="Group" table="t_group"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<set name="users"> 
<key column="groupid"/> 
<one-to-many class="User"/> 
</set> 
</class> 
</hibernate-mapping> 
User.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.User" table="t_user"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
</class> 
</hibernate-mapping> 


9.一对多双向(Group<--> User)

Group.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.dragon.hibernate"> 
<class name="Group" table="t_group"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<set name="users" cascade="all"> 
<key column="groupid"/> 
<one-to-many class="User"/> 
</set> 
</class> 
</hibernate-mapping> 
User.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.dragon.hibernate.User" table="t_user"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<many-to-one name="groups" column="groupid"/> 
</class> 
</hibernate-mapping> 


10.继承映射(Pig和Bird 继承Animal)

--一棵继承树映射成一张表
extends.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.dragon.hibernate"> 
<class name="Animal" table="t_extends"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<discriminator column="type" type="string"/> 
<property name="name"/> 
<property name="sex"/> 
<subclass name="Pig" discriminator-value="P"> 
<property name="weight"/> 
</subclass> 
<subclass name="Bird" discriminator-value="B"> 
<property name="height"/> 
</subclass> 
</class> 
</hibernate-mapping> 


11.继承映射(Pig和Bird 继承Animal)

--每个具体类映射成一张表
extends.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.dragon.hibernate"> 
<class name="Animal" table="t_animal"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<property name="sex"/> 
<joined-subclass name="Pig" table="t_pig"> 
<key column="pid"/> 
<property name="weight"> </property> 
</joined-subclass> 
<joined-subclass name="Bird" table="t_bird"> 
<key column="bid"/> 
<property name="height"> </property> 
</joined-subclass> 
</class> 
</hibernate-mapping> 


12.继承映射(Pig和Bird 继承Animal)

--每个子类类映射成一张表
extends.hbm.xml文件如下:
 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.dragon.hibernate"> 
<class name="Animal" table="t_animal"> 
<id name="id"> 
<generator class="uuid"/> 
</id> 
<property name="name"/> 
<property name="sex"/> 
<union-subclass name="Pig" table="t_pig"> 
<property name="weight"/> 
</union-subclass> 
<union-subclass name="Bird" table="t_bird"> 
<property name="height"/> 
</union-subclass> 
</class> 
</hibernate-mapping> 
**注释在使用<id name="id">
<generator class="uuid"/>
</id> 是不能将<generator class="uuid"/> 改写成<generator class="native"/> ,不然会出错。相应的Animal类中的id字段类型也要该为String.
如果在<class name="Animal" table="t_animal"> 中添加Abstract="true"可以使hibernate不生成表t_animal


13. component映射
component.hbm.xml文件如下: 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.bjsxt.hibernate.User" table="t_user"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<component name="contact"> 
<property name="email"/> 
<property name="address"/> 
<property name="zipCode"/> 
<property name="contactTel"/> 
</component> 
</class> 
</hibernate-mapping> 
User类中有以下属性:
private int id;
private String name;
private Contact contact;它不再是一种引用了 


14. Set,Map,Arrary[],List映射
CollectionMapping.hbm.xml文件如下: 

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="com.bjsxt.hibernate.CollectionMapping" table="t_CollectionMapping"> 
<id name="id"> 
<generator class="native"/> 
</id> 
<property name="name"/> 
<set name="setValue" table="t_set_value"> 
<key column="set_id"/> 
<element type="string" column="set_value"/> 
</set> 
<list name="listValue" table="t_list_value"> 
<key column="list_id"/> 
<list-index column="list_index"/> 
<element type="string" column="list_value"/> 
</list> 
<array name="arrayValue" table="t_array_value"> 
<key column="array_id"/> 
<list-index column="array_index"/> 
<element type="string" column="array_value"/> 
</array> 
<map name="mapValue" table="t_map_value"> 
<key column="map_id"/> 
<map-key type="string" column="map_key"/> 
<element type="string" column="map_value"/> 
</map> 
</class> 
</hibernate-mapping>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值