在项目开发中,必然会遇到数据持久化的问题。在关系模型中有一对一,一对多,多对一,多对多集中模型;下面就这几种模型在Hibernate中是如何实现的,做一个简单的记录:
首先是一对一模型,
在这个模型中,每个学生拥有一张图书证,一个图书证也只能对应一个学生,而图书证是不能独立存在的。那么student的PK是id,library_card的PK,FK id是依赖与student的PK的。
下面是两个类的类图以及如何配置他们的映射文件
Student的映射文件:
<?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="domain"> <class name="Person" table="person"> <id name="id"> <generator class="native" />//这里的id是自增长的 </id> <property name="name"></property>
<one-to-one name="LibraryCard"></one-to-one></class></hibernate-mapping><property name="name"></property>
LibraryCard映射文件:
<?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="domain"> <class name="LibraryCard" table="library_card"> <id name="id"> <generator class="foreign" > //这里的id是更具外键获得的,从自己的属性student中获得 <param name="property">student</param> </generator> </id> <property name="status"></property> <one-to-one name="student" constrained="true"></one-to-one> </class> </hibernate-mapping>
constrained的作用是在表结构上加入外键约束,如果不加是数据对象上是没有影响的。<one-to-one name="student" constrained="true"></one-to-one>