1.One to one(基于外键的1对1)(单向)
实体类
Book.java
private int id;
private String bookname;
private User user;
User.java
private Integer id;
private String username;
private String password;
配置文件
Book.hbm.xml
<class name="com.hxzy.hibernate.entity.Book" table="t_book1">
<id name="id">
<generator class="native"></generator>
</id>
<property name="bookname"></property>
<many-to-one name="user" column="userid" unique="true" cascade="all"></many-to-one>
</class>
User.hbm.xml
<class name="com.hxzy.hibernate.entity.User" table="t_user1">
<id name="id">
<generator class="native"></generator>
</id>
<property name="username"></property>
<property name="password"></property>
</class>
数据表结构
Book表
字段名 | 字段类型 |
---|---|
id | Number(主键) |
bookname | Varchar2 |
userid(外键关联,唯一键) | Number |
User表
字段名 | 字段类型 |
---|---|
id | Number(主键) |
username | Varchar2 |
password | Varchar2 |
2.One to one(基于主键的1对1)(单向)
实体类
Person.java
private int id;
private String username;
private Address address;
Address.java
private int id;
private String addrName;
配置文件
Person.hbm.xml
<class name="com.hxzy.hibernate.entity.Person" table="t_person1">
<id name="id" column="addrid">
<generator class="foreign">
<param name="property">address</param>
</generator>
</id>
<property name="username"></property>
<!-- constrained 使当前主键添加上外键约束 -->
<one-to-one name="address" constrained="true"></one-to-one>
</class>
Address.hbm.xml
<class name="com.hxzy.hibernate.entity.Address" table="t_Address1">
<id name="id" column="addrid">
<generator class="native"></generator>
</id>
<property name="addrName"></property>
</class>
数据表结构
Tips:相当于直接把Address的id当成Person的id
Person表
字段名 | 字段类型 |
---|---|
addrid(外键关联) | Number(主键) |
username | Varchar2 |
Address表
字段名 | 字段类型 |
---|---|
addrid | Number(主键) |
addrName | Varchar2 |
3.Many to one多对一(单向)
实体类
多本书对应一个用户
Book.java
private int id;
private String bookname;
private User user;
User.java
private Integer id;
private String username;
private String password;
配置文件
Book.hbm.xml
<class name="com.hxzy.hibernate.entity.Book" table="t_book1">
<id name="id">
<generator class="native"></generator>
</id>
<property name="bookname"></property>
<many-to-one name="user" column="userid" cascade="all"></many-to-one>
</class>
User.hbm.xml
<class name="com.hxzy.hibernate.entity.User" table="t_user1">
<id name="id">
<generator class="native"></generator>
</id>
<property name="username"></property>
<property name="password"></property>
</class>
数据表结构
Book表
字段名 | 字段类型 |
---|---|
id | Number(主键) |
bookname | Varchar2 |
userid(外键关联) | Number |
User表
字段名 | 字段类型 |
---|---|
id | Number(主键) |
username | Varchar2 |
password | Varchar2 |
4.One to many一对多(单向)
实体类
一个班级对应多个学生
Clazz.java
private int id;
private String clsName;
private Set<Student> students = new HashSet<Student>();
Student.java
private int id;
private String stuName;
配置文件
Clazz.hbm.xml
<class name="com.hxzy.hibernate.entity.Clazz" table="t_Clazz1">
<id name="id" column="clsid">
<generator class="native"></generator>
</id>
<property name="clsName"></property>
<set name="students">
<key column="clsid" not-null="true"></key>
<one-to-many class="com.hxzy.hibernate.entity.Student"/>
</set>
</class>
Student.hbm.xml
<class name="com.hxzy.hibernate.entity.Student" table="t_Student1">
<id name="id" column="stuid">
<generator class="native"></generator>
</id>
<property name="stuName"></property>
</class>
数据表结构
Clazz表
字段名 | 字段类型 |
---|---|
clsid | Number(主键) |
clsName | Varchar2 |
password | Varchar2 |
Student表
字段名 | 字段类型 |
---|---|
stuid | Number(主键) |
stuName | Varchar2 |
clsid(外键) | Number |
5.Many to many多对多(单向)
实体类
多个课程对应多个学生
Course.java
private int id;
private String courseName;
private Set<Student> students = new HashSet<Student>();
Student.java
private int id;
private String stuName;
配置文件
Course.hbm.xml
<class name="com.hxzy.hibernate.entity.Course" table="t_Course1">
<id name="id" column="courseid">
<generator class="native"></generator>
</id>
<property name="courseName"></property>
<set name="students" table="t_course_student">
<key column="courseid"></key>
<many-to-many column="stuid" class="com.hxzy.hibernate.entity.Student"></many-to-many>
</set>
</class>
Student.hbm.xml
<class name="com.hxzy.hibernate.entity.Student" table="t_Student1">
<id name="id" column="stuid">
<generator class="native"></generator>
</id>
<property name="stuName"></property>
</class>
数据表结构
Course表
字段名 | 字段类型 |
---|---|
courseid | Number(主键) |
courseName | Varchar2 |
Student表
字段名 | 字段类型 |
---|---|
stuid | Number(主键) |
stuName | Varchar2 |
中间表
字段名 | 字段类型 |
---|---|
Courseid(关联) | Number(主键) |
Stuid(关联) | Number(主键) |
6.Many to many多对多(双向)
实体类
多个课程对应多个学生
Course.java
private int id;
private String courseName;
private Set<Student> students = new HashSet<Student>();
Student.java
private int id;
private String stuName;
private Set<Course> courses = new HashSet<Course>();
配置文件
Course.hbm.xml
<class name="com.hxzy.hibernate.entity.Course" table="t_Course1">
<id name="id" column="courseid">
<generator class="native"></generator>
</id>
<property name="courseName"></property>
<set name="students" table="t_course_student">
<key column="courseid"></key>
<many-to-many column="stuid" class="com.hxzy.hibernate.entity.Student"></many-to-many>
</set>
</class>
Student.hbm.xml
<class name="com.hxzy.hibernate.entity.Student" table="t_Student1">
<id name="id" column="stuid">
<generator class="native"></generator>
</id>
<property name="stuName"></property>
<!-- 将一方的inverse属性设置为true,即将主外键的关系交由另一方来维护 -->
<set name="courses" inverse="true" table="t_course_student">
<key column="stuid"></key>
<many-to-many column="courseid" class="com.hxzy.hibernate.entity.Course"></many-to-many>
</set>
</class>
数据表结构
Course表
字段名 | 字段类型 |
---|---|
courseid | Number(主键) |
courseName | Varchar2 |
Student表
字段名 | 字段类型 |
---|---|
stuid | Number(主键) |
stuName | Varchar2 |
中间表
字段名 | 字段类型 |
---|---|
Courseid(关联) | Number(主键) |
Stuid(关联) | Number(主键) |
7.One to one(基于外键的1对1)(双向)
实体类
Book.java
private int id;
private String bookname;
private User user;
User.java
private Integer id;
private String username;
private String password;
private Book book;
配置文件
Book.hbm.xml
<class name="com.hxzy.hibernate.entity.Book" table="t_book1">
<id name="id">
<generator class="native"></generator>
</id>
<property name="bookname"></property>
<many-to-one name="user" column="userid" unique="true" cascade="all"></many-to-one>
</class>
User.hbm.xml
<class name="com.hxzy.hibernate.entity.User" table="t_user1">
<id name="id">
<generator class="native"></generator>
</id>
<property name="username"></property>
<property name="password"></property>
<one-to-one name="book" property-ref="user"></one-to-one>
</class>
数据表结构
Book表
字段名 | 字段类型 |
---|---|
id | Number(主键) |
bookname | Varchar2 |
userid(外键关联,唯一键) | Number |
User表
字段名 | 字段类型 |
---|---|
id | Number(主键) |
username | Varchar2 |
password | Varchar2 |
8.One to one(基于主键的1对1)(双向)
实体类
Person.java
private int id;
private String username;
private Address address;
Address.java
private int id;
private String addrName;
private User user;
配置文件
Person.hbm.xml
<class name="com.hxzy.hibernate.entity.Person" table="t_person1">
<id name="id" column="addrid">
<generator class="foreign">
<param name="property">address</param>
</generator>
</id>
<property name="username"></property>
<!-- constrained 使当前主键添加上外键约束 -->
<one-to-one name="address" constrained="true"></one-to-one>
</class>
Address.hbm.xml
<class name="com.hxzy.hibernate.entity.Address"
table="t_Address1">
<id name="id" column="addrid">
<generator class="native"></generator>
</id>
<property name="addrName"></property>
<one-to-one name="person"></one-to-one>
</class>
数据表结构
Tips:相当于直接把Address的id当成Person的id
Person表
字段名 | 字段类型 |
---|---|
addrid(外键关联) | Number(主键) |
username | Varchar2 |
Address表
字段名 | 字段类型 |
---|---|
addrid | Number(主键) |
addrName | Varchar2 |
9.一对多,多对一(双向)
实体类
Student.java
private int id;
private String stuName;
private Clazz clazz;
Clazz.java
private int id;
private String clsName;
private Set<Student> students = new HashSet<Student>();
配置文件
Student.hbm.xml
<class name="com.hxzy.hibernate.entity.Student" table="t_Student1">
<id name="id" column="stuid">
<generator class="native"></generator>
</id>
<property name="stuName"></property>
<many-to-one name="clazz" column="clsid" cascade="all"/>
</class>
Clazz.hbm.xml
<class name="com.hxzy.hibernate.entity.Clazz" table="t_Clazz1">
<id name="id" column="clsid">
<generator class="native"></generator>
</id>
<property name="clsName"></property>
<set name="students" inverse="true">
<key column="clsid" not-null="true"></key>
<one-to-many class="com.hxzy.hibernate.entity.Student"/>
</set>
</class>
数据表结构
Student表
字段名 | 字段类型 |
---|---|
stuid | Number(主键) |
stuName | Varchar2 |
Clsid(外键) | Number |
Clazz表
字段名 | 字段类型 |
---|---|
clsid | Number(主键) |
clsName | Varchar2 |