多对多单向关联

没有关联关系的一方:

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_idstudent_id 
 ... ...

表名为:t_s

 

 

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

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

 tb_teacher_idstudents_id 
 ... ...

表名为:tb_teacher_tb_student


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值