现在的位置: 首页 > 综合 > 正文

多对多单向关联

2018年05月23日 ⁄ 综合 ⁄ 共 1640字 ⁄ 字号 评论关闭

没有关联关系的一方:

package com.eneitys;

 

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;

 

@Entity

@Table(name = "tb_student")

public class Student {

 

    private int id;

    private String stuName;

 

    @Id

    @GeneratedValue

    public int getId() {

       return id;

    }

 

    public void setId(int id) {

       this.id = id;

    }

 

    public String getStuName() {

       return stuName;

    }

 

    public void setStuName(String stuName) {

       this.stuName = stuName;

    }

}

有关联关系的一方:

package com.eneitys;

 

import java.util.HashSet;

import java.util.Set;

 

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

 

@Entity

@Table(name = "tb_teacher")

public class Teacher {

 

    private int id;

    private String name;

 

    private Set<Student> students = new HashSet<Student>();

 

    @Id

    @GeneratedValue

    public int getId() {

       return id;

    }

 

    public void setId(int id) {

       this.id = id;

    }

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    @ManyToMany//在其中一方指定关联关系由谁维护

    @JoinTable(name="t_s",//指定中间表的表名

           joinColumns={@JoinColumn(name="teacher_id")},    //指定中间表中本方的外键字段

           inverseJoinColumns={@JoinColumn(name="student_id")}  //指定中间表中反转方的外键字段

           )

    public Set<Student> getStudents() {

       return students;

    }

 

    public void setStudents(Set<Student> students) {

       this.students = students;

    }

}

JoinTable注解:name是指定为两张表建立联系的中间表的表名.

              joinColumns是指定为当前这个类所生成的外键名.

              inverseJoinColumns是指定为另一个类所生成的外键名.

最后生成的中间表的结构是

 teacher_id student_id 
 ...  ...

表名为:t_s

 

 

如果没有指定@JoinTable的属性,Hibernate会自动取每个表的名字拼装起来作为中间表的表名,维护方的字段是表名+"_id",

反转方的字段是集合的名字+"_id"

 tb_teacher_id students_id 
 ...  ...

表名为:tb_teacher_tb_student

抱歉!评论已关闭.