一、表之间的关系有:
1.一对一:单向、双向;
2.一对多:单向、双向;
3.多对一:单向、双向;
4.多对多:单向、双向;
二、一对一单向关系举例(annotation 方式)。
例如:husband和wife两个表,都有id和name字段。
在数据库的设计上,应为:wife作为主表,husband作为子表,husband表中需要加入wife表的wifeid字段。
在类的设计上,除了均有id和name的get和set方法外,annotation标示不再累赘。在husband类中,加入wife变量
@entity
public class husband{
..
..
public wife mywife;
@oneToone
public wife getwift(){
}
}
三、一对一关联(xml方式)
例如学生(Student)和学生证(StudentCard)是一对一的关系。StudentCard类中id、num和student字段。
StudentCard类的xml文件配置如下:
<hibernate-mapping>
<class name="com.bjsxt.hibernate.StuIdCard">
<id name="id">
<generator class="native"></generator>
</id>
<property name="num"/>
<many-to-one name="student" column="studentId" unique="true"></many-to-one>
</class>
</hibernate-mapping>
意思是StudentCard类中,有个字段student,对应数据库中studentid列,many-to-one的意思是多个学生证对应一个学生,但是后面加了unique=true,意思就是唯一的。
四、一对一关系(双向关联 annotation方式)
1.例如husband和wife是一对一双向关联,husband表中有wifeid,wife表中有husbandid
2.在husband类中
@entity
public class husband{
..
..
public wife mywife;
@oneToone
public wife getwift(){
}
}
3.在wife类中
@entity
public class wife{
..
..
public husband myhusband;
@oneToone(mappedby=“wife“)
public husband gethusband(){
}
}
mappedby=“wife“的意思是: 通过husband类中的wife字段,进行一对一双向对应。
五、一对一双向关联(xml方式)
例如学生(Student)和学生证(StudentCard)是一对一的双向关联关系。
1、StudentCard类中id、num和student字段。
StudentCard类的xml文件配置如下:
<hibernate-mapping>
<class name="com.bjsxt.hibernate.StuIdCard">
<id name="id">
<generator class="native"></generator>
</id>
<property name="num"/>
<many-to-one name="student" column="studentId" unique="true"></many-to-one>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.bjsxt.hibernate.Student" dynamic-update="true">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<property name="age" />
<property name="sex" />
<property name="good" type="yes_no"></property>
<one-to-one name="stuIdCard" property-ref="student"></one-to-one>
</class>
</hibernate-mapping>
意思是与stuldCard类中student字段一对一对应关系。