Hibernate 关系注解
Hibernate relational annotations
假设我有一个学生,想给每个学生画一个房子。
假设实体 1:Student_master table 被描述为 (Student_id(primary_key),Standard,grade,age)
说实体 2:house_master table 被描述为 (house_id(primary_key),house_color_house_capacity)
假设实体 3 :student_house_mapping table 是 (student_house_id,Student_id(foreign_key),house_id(foreign_key)).
现在我要遍历每个学生并获取其房屋详细信息,
例如,我得到了一个学生,现在通过 student_house_mapping table 我得到了 house_id 并且有了它我得到了一个特定的 house_master 对象。
如果我有所有实体的 类
,在休眠中如何使用关系(示例:一对一,多对一)注释来实现
我使用的一种方法是 @JoinTable
注释。
简单示例:
@ManyToMany
@JoinTable(name = "student_house_mapping")
private List<Student> students;
如果 hibernate 无法自行找到正确的连接列(有时是这种情况),您必须定义
joinColumns = {@JoinColumn(...)},
inverseJoinColumns = {@JoinColumn(...)})
@JoinTable
中的参数也
通过阅读第一句话,我可以说它是 OneToOne,正如您所说的每个学生都有一个房子。
如果考虑一个场景,每个学生可以有很多房子。
然后,这种关系将是 OneToMany 并且只有两个 tables 学生和房子与 Student 与 House(POJO classes).
如果你认为连房子都可以属于很多学生。
然后,你应该带着你现在的 tables 学生、房子和 students_house table(Bridge table).
去 ManyToMany
Student.java
@Entity
@Table(name="students")
public class Student {
private int studentId;// set the column name with @JoinColumn annotation if you want
private int standard;// to be different from the variable name
private int grade;
private int age;
@OneToMany
@JoinTable(name="students_houses",
joinColumns = @JoinColumn(name="studentId"),
inverseJoinColumns = @JoinColumn(name="houseId"))
private List<House> houses;
// getters and setters
}
House.java
@Entity
@Table(name="houses")
public class House {
private int houseId;
private String color;
private int houseCapacity;
@OneToMany
@JoinTable(name="students_houses",
joinColumns = @JoinColumn(name="houseId"),
inverseJoinColumns = @JoinColumn(name="studentId"))
private List<Student> students;
// getters and setters
}
如果你想创建自定义桥 table 与 table 的外键以外的其他字段,你可以创建一个自定义桥 class 每个 class 与 Bridge class 有 OneToMany。 Bridge class 具有 ManyToOne 和两个 classes.
您可以参考 Whosebug 文档以获取更多示例
Assuming Student and House has ManyToMany relationship, you can design something like this:
package com.raf.prac.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int student_id;
@Column(name = "standard")
String standard;
@Column(name = "grade")
String grade;
@Column(name = "age")
int age;
@ManyToMany
@JoinTable(name = "student_house_mapping",
joinColumns = {@JoinColumn(name = "student_id")},
inverseJoinColumns = {@JoinColumn(name = "house_id")})
private Set<House> houses = new HashSet();
public Student() {
}
public String getStandard() {
return standard;
}
public void setStandard(String standard) {
this.standard = standard;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Set<House> getHouses() {
return houses;
}
public void setHouses(Set<House> houses) {
this.houses = houses;
}
}
package com.raf.prac.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
/**
* Created by ar on 22/08/2016.
*/
@Entity
@Table(name = "house")
public class House {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int house_id;
@Column(name = "house_color")
private String house_color;
@Column(name = "house_capacity")
private int house_capacity;
@ManyToMany(mappedBy = "houses")
Set<Student> students = new HashSet();
public House() {
}
public int getHouse_id() {
return house_id;
}
public void setHouse_id(int house_id) {
this.house_id = house_id;
}
public String getHouse_color() {
return house_color;
}
public void setHouse_color(String house_color) {
this.house_color = house_color;
}
public int getHouse_capacity() {
return house_capacity;
}
public void setHouse_capacity(int house_capacity) {
this.house_capacity = house_capacity;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
假设我有一个学生,想给每个学生画一个房子。
假设实体 1:Student_master table 被描述为 (Student_id(primary_key),Standard,grade,age)
说实体 2:house_master table 被描述为 (house_id(primary_key),house_color_house_capacity)
假设实体 3 :student_house_mapping table 是 (student_house_id,Student_id(foreign_key),house_id(foreign_key)).
现在我要遍历每个学生并获取其房屋详细信息,
例如,我得到了一个学生,现在通过 student_house_mapping table 我得到了 house_id 并且有了它我得到了一个特定的 house_master 对象。
如果我有所有实体的 类
,在休眠中如何使用关系(示例:一对一,多对一)注释来实现我使用的一种方法是 @JoinTable
注释。
简单示例:
@ManyToMany
@JoinTable(name = "student_house_mapping")
private List<Student> students;
如果 hibernate 无法自行找到正确的连接列(有时是这种情况),您必须定义
joinColumns = {@JoinColumn(...)},
inverseJoinColumns = {@JoinColumn(...)})
@JoinTable
中的参数也
通过阅读第一句话,我可以说它是 OneToOne,正如您所说的每个学生都有一个房子。
如果考虑一个场景,每个学生可以有很多房子。 然后,这种关系将是 OneToMany 并且只有两个 tables 学生和房子与 Student 与 House(POJO classes).
如果你认为连房子都可以属于很多学生。 然后,你应该带着你现在的 tables 学生、房子和 students_house table(Bridge table).
去 ManyToManyStudent.java
@Entity
@Table(name="students")
public class Student {
private int studentId;// set the column name with @JoinColumn annotation if you want
private int standard;// to be different from the variable name
private int grade;
private int age;
@OneToMany
@JoinTable(name="students_houses",
joinColumns = @JoinColumn(name="studentId"),
inverseJoinColumns = @JoinColumn(name="houseId"))
private List<House> houses;
// getters and setters
}
House.java
@Entity
@Table(name="houses")
public class House {
private int houseId;
private String color;
private int houseCapacity;
@OneToMany
@JoinTable(name="students_houses",
joinColumns = @JoinColumn(name="houseId"),
inverseJoinColumns = @JoinColumn(name="studentId"))
private List<Student> students;
// getters and setters
}
如果你想创建自定义桥 table 与 table 的外键以外的其他字段,你可以创建一个自定义桥 class 每个 class 与 Bridge class 有 OneToMany。 Bridge class 具有 ManyToOne 和两个 classes.
您可以参考 Whosebug 文档以获取更多示例
Assuming Student and House has ManyToMany relationship, you can design something like this:
package com.raf.prac.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int student_id;
@Column(name = "standard")
String standard;
@Column(name = "grade")
String grade;
@Column(name = "age")
int age;
@ManyToMany
@JoinTable(name = "student_house_mapping",
joinColumns = {@JoinColumn(name = "student_id")},
inverseJoinColumns = {@JoinColumn(name = "house_id")})
private Set<House> houses = new HashSet();
public Student() {
}
public String getStandard() {
return standard;
}
public void setStandard(String standard) {
this.standard = standard;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Set<House> getHouses() {
return houses;
}
public void setHouses(Set<House> houses) {
this.houses = houses;
}
}
package com.raf.prac.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
/**
* Created by ar on 22/08/2016.
*/
@Entity
@Table(name = "house")
public class House {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int house_id;
@Column(name = "house_color")
private String house_color;
@Column(name = "house_capacity")
private int house_capacity;
@ManyToMany(mappedBy = "houses")
Set<Student> students = new HashSet();
public House() {
}
public int getHouse_id() {
return house_id;
}
public void setHouse_id(int house_id) {
this.house_id = house_id;
}
public String getHouse_color() {
return house_color;
}
public void setHouse_color(String house_color) {
this.house_color = house_color;
}
public int getHouse_capacity() {
return house_capacity;
}
public void setHouse_capacity(int house_capacity) {
this.house_capacity = house_capacity;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}