在Spring Hibernate中,实体关系映射是通过注解或XML配置文件来实现的。这里我们主要介绍使用注解的方式来映射实体关系。
实体关系主要有以下几种类型:
下面我们通过具体的例子来说明如何映射这些关系。
假设我们有两个实体类:User和Profile,每个用户只能有一个用户配置文件,每个用户配置文件也只能属于一个用户。这是一个典型的一对一关系。
首先,在User实体类中,使用@OneToOne
注解来表示与Profile的关系:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@OneToOne
@JoinColumn(name = "profile_id")
private Profile profile;
}
然后,在Profile实体类中,使用@OneToOne
注解来表示与User的关系:
@Entity
public class Profile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String address;
@OneToOne(mappedBy = "profile")
private User user;
}
假设我们有两个实体类:Department和Employee,一个部门可以有多个员工,但每个员工只能属于一个部门。这是一个典型的一对多关系。
首先,在Department实体类中,使用@OneToMany
注解来表示与Employee的关系:
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List<Employee> employees;
}
然后,在Employee实体类中,使用@ManyToOne
注解来表示与Department的关系:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
}
假设我们有两个实体类:Student和Course,一个学生可以选多门课程,一门课程也可以被多个学生选。这是一个典型的多对多关系。
首先,创建一个中间表(例如:student_course),用于存储学生和课程之间的关系。然后,在Student实体类中,使用@ManyToMany
注解来表示与Course的关系:
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany
@JoinTable(name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses;
}
接着,在Course实体类中,使用@ManyToMany
注解来表示与Student的关系:
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "courses")
private List<Student> students;
}
通过以上示例,我们可以看到如何在Spring Hibernate中使用注解来映射实体关系。当然,实际项目中可能会有更复杂的关系映射,但基本的映射原理是相同的。