Hibernate其实就是ORM的一种实现方式,其表达的就是实体和关系之间的一种关系。比方说实体之间有几种关系:一对一,多对一,多对多。而在下面要说的就是一对一关系映射,其分两种情况:主键映射和外键映射
1、主键映射:(person的id即是主键,又是IdCard的外键)
1
)
Person
-IdCard
(单向关联,关系在
Person
)
i、IdCard:
<hibernate-mapping>
<class name="com.tgb.hibernate.IdCard" table="t_idCard"><id name="id"><generator class="native" /></id><property name="cardNo" /></class></hibernate-mapping>
ii、Person:
<hibernate-mapping>
<class name="com.tgb.hibernate.Person" table="t_person"><id name="id" type="integer"><!-- 采用foreign生成策略,foreign会取得关联对象的标识 --><generator class="foreign" ><!-- property指关联对象 --><param name="property">idCard</param></generator></id><property name="name" />
<!--one-to-one指示hibernate如何加载其关联对象,默认根据主键加载也就是拿到关系字段值,根据对端的主键来加载关联对象constrained="true"表示,当前主键(Person的主键)还是一个外键参照了对端的主键(IdCard的主键),也就是会生成外键约束语句--><one-to-one name="idCard" constrained="true" /></class></hibernate-mapping>
2)Person-IdCard(双向关联,关系在Person),其余关系不变,只需要在IdCard关系端加入person的引用即可:
<hibernate-mapping>
<class name="com.tgb.hibernate.IdCard" table="t_idCard"><id name="id"><generator class="native" /></id><property name="cardNo" /><!-- 关联Person端 --><one-to-one name="person" /></class></hibernate-mapping>
2、外键映射:就是在person的一端加入idCard的主键作为外键
1
)
Person
-IdCard
(单向关联,
many-to-one
的特殊形式,关系维护在person端)
i、IdCard
<hibernate-mapping>
<class name="com.tgb.hibernate.IdCard" table="t_idCard"><id name="id"><generator class="native" /></id><property name="cardNo" /></class></hibernate-mapping>
ii
、
Person
<hibernate-mapping>
<class name="com.tgb.hibernate.Person" table="t_person"><id name="id"><generator class="native" /></id><property name="name" /><many-to-one name="idCard" unique="true" /></class></hibernate-mapping>
2)Person-IdCard(双向关联):
其余关系不变,只需
在IdCard端添加对Person的关联即可
<hibernate-mapping><class name="com.tgb.hibernate.IdCard" table="t_idCard"><id name="id"><generator class="native" /></id><property name="cardNo" /><one-to-one name="person" property-ref="idCard" /></class></hibernate-mapping>
3、当然有了上面的关系还是不行的,它不会自动映射到数据库中生成我们要的表,所以在此我们还需要一个工具类帮助我们在数据库中生成表,如下:
public
static
void
main(String[] args) {
// 默认读取hibernate.cfg.xml文件Configuration cfg =new Configuration().configure();SchemaExport export =new SchemaExport(cfg);export.create(true, true);}
总结:通过配置上面的操作,我们就可以将其导入到数据库中生成表。虽然看着有点麻烦,其实还是很简单的。一对一说完了,结下来就要说多对一了,敬请期待...