(6)ManyToMany单向、双向:@JoinTable

一、manytomany单向
单向是指类层面,在下面例子中老师类可以知道要教哪些学生,学生不知被哪些老师教
**需要用到连接表**@JoinTable(name="t_s",
joinColumns={@JoinColumn(name="teacher_id")},inverseJoinColumns={@JoinColumn(name="student_id")}
)

也可以不用连接表,但是若不用连接表,表名、列名规则:
在student表中没有写外键则会用对方的表名_主键名
在teacher表中有外键,则会s_id(也是student的主键名)
表名是student_teacher
student类

@Entity
public class student {

    private int id;
    private String name;

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

Teacher类

@Entity 

public class teacher {

    private int id;
    private String name;
    private Set<student> s=new HashSet<student>();



    @Id //必须加在getId上面
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    @ManyToMany
    @JoinTable(name="t_s",
    joinColumns={@JoinColumn(name="teacher_id")},inverseJoinColumns={@JoinColumn(name="student_id")}
    )//将会以上两个字段为联合主键
    //定义中间表的名称,列名:joinColumns,inverseJoinColumns是预防组合主键的时候。
    public Set<student> getS() {
        return s;
    }
    public void setS(Set<student> s) {
        this.s = s;
    }   
}

二、manytomany双向
也可以用@JoinTable对连接表字段名进行修改

@Entity
public class student {

    private int id;
    private String name;
    private Set<teacher> ts=new HashSet<teacher>();

    @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<teacher> getTs() {
        return ts;
    }
    public void setTs(Set<teacher> ts) {
        this.ts = ts;
    }



}
@Entity 

public class teacher {

    private int id;
    private String name;
    private Set<student> s=new HashSet<student>();



    @Id //必须加在getId上面
    @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(mappedBy="ts")

    //定义中间表的名称,列名:joinColumns,inverseJoinColumns是预防组合主键的时候。
    public Set<student> getS() {
        return s;
    }
    public void setS(Set<student> s) {
        this.s = s;
    }


}
posted @ 2017-11-12 15:07  测试开发分享站  阅读(95)  评论(0编辑  收藏  举报