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;
    }
}