在Spring Hibernate中,實(shí)體關(guān)系映射是通過(guò)注解或XML配置文件來(lái)實(shí)現(xiàn)的。這里我們主要介紹使用注解的方式來(lái)映射實(shí)體關(guān)系。
實(shí)體關(guān)系主要有以下幾種類(lèi)型:
下面我們通過(guò)具體的例子來(lái)說(shuō)明如何映射這些關(guān)系。
假設(shè)我們有兩個(gè)實(shí)體類(lèi):User和Profile,每個(gè)用戶(hù)只能有一個(gè)用戶(hù)配置文件,每個(gè)用戶(hù)配置文件也只能屬于一個(gè)用戶(hù)。這是一個(gè)典型的一對(duì)一關(guān)系。
首先,在User實(shí)體類(lèi)中,使用@OneToOne
注解來(lái)表示與Profile的關(guān)系:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@OneToOne
@JoinColumn(name = "profile_id")
private Profile profile;
}
然后,在Profile實(shí)體類(lèi)中,使用@OneToOne
注解來(lái)表示與User的關(guān)系:
@Entity
public class Profile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String address;
@OneToOne(mappedBy = "profile")
private User user;
}
假設(shè)我們有兩個(gè)實(shí)體類(lèi):Department和Employee,一個(gè)部門(mén)可以有多個(gè)員工,但每個(gè)員工只能屬于一個(gè)部門(mén)。這是一個(gè)典型的一對(duì)多關(guān)系。
首先,在Department實(shí)體類(lèi)中,使用@OneToMany
注解來(lái)表示與Employee的關(guān)系:
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List<Employee> employees;
}
然后,在Employee實(shí)體類(lèi)中,使用@ManyToOne
注解來(lái)表示與Department的關(guān)系:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
}
假設(shè)我們有兩個(gè)實(shí)體類(lèi):Student和Course,一個(gè)學(xué)生可以選多門(mén)課程,一門(mén)課程也可以被多個(gè)學(xué)生選。這是一個(gè)典型的多對(duì)多關(guān)系。
首先,創(chuàng)建一個(gè)中間表(例如:student_course),用于存儲(chǔ)學(xué)生和課程之間的關(guān)系。然后,在Student實(shí)體類(lèi)中,使用@ManyToMany
注解來(lái)表示與Course的關(guān)系:
@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實(shí)體類(lèi)中,使用@ManyToMany
注解來(lái)表示與Student的關(guān)系:
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "courses")
private List<Student> students;
}
通過(guò)以上示例,我們可以看到如何在Spring Hibernate中使用注解來(lái)映射實(shí)體關(guān)系。當(dāng)然,實(shí)際項(xiàng)目中可能會(huì)有更復(fù)雜的關(guān)系映射,但基本的映射原理是相同的。