ManyToMany JPA

package entity;

import java.io.Serializable;
import javax.persistence.*;

import java.util.HashSet;
import java.util.Set;


@Entity
@Table(name = "STUDENT")
public class Student implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name = "studentSeq", sequenceName = "STU_SEQ", allocationSize = 1, initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "studentSeq")
    private long sid;

    private String sname;

    public Student(long sid, String sname) {
        super();
        this.sid = sid;
        this.sname = sname;
    }

    // bi-directional many-to-many association to Teacher
    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(name = "STUDENT_TEACHER",

    joinColumns = { @JoinColumn(name = "ST_SID") }, // 主动方中间表ID

    inverseJoinColumns = { @JoinColumn(name = "ST_TID") })
    // 为放弃主动方的 中间表Id
    private Set<Teacher> teachers = new HashSet<Teacher>();

    public Student() {
    }

    public long getSid() {
        return this.sid;
    }

    public void setSid(long sid) {
        this.sid = sid;
    }

    public String getSname() {
        return this.sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public Set<Teacher> getTeachers() {
        return teachers;
    }

    public void setTeachers(Set<Teacher> teachers) {
        this.teachers = teachers;
    }

}


package entity;

import java.io.Serializable;
import javax.persistence.*;

import java.util.HashSet;
import java.util.Set;


@Entity
@Table(name = "TEACHER")
public class Teacher implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name = "teacherSeq", sequenceName = "TH_SEQ", allocationSize = 1, initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "teacherSeq")
    private long tid;

    private String tname;

    // 设置 mappedBy 指定主动方维护 如果不设置将会再生成一个中间表
    @ManyToMany(mappedBy = "teachers", cascade = { CascadeType.ALL })
    private Set<Student> students = new HashSet<Student>();

    public Teacher() {
    }

    public long getTid() {
        return this.tid;
    }

    public void setTid(long tid) {
        this.tid = tid;
    }

    public String getTname() {
        return this.tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public Set<Student> getStudents() {
        return this.students;
    }

    public void setStudents(Set<Student> students) {
        this.students = students;
    }

}

package test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import entity.Student;
import entity.Teacher;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence
                .createEntityManagerFactory("jpa");
        EntityManager em = factory.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

       

        // 以老师表为主表时:
        Teacher teacher = new Teacher();
        teacher.setTname("teacheraa");

        Student stu = new Student();
        stu.setSname("yoyoaa");
        stu.getTeachers().add(teacher);

        teacher.getStudents().add(stu);
        em.flush();
        em.persist(teacher);
        tx.commit();
        em.close();
        factory.close();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值