OneToMany 中间表关联

本文介绍了一种使用Java实现的学生与班级间一对多关系的ORM映射方法,通过实体类Class和Student展示了如何设置关联关系及进行数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Class

@Entity
public class Class {
	@Id
	@GeneratedValue
	@Column(name = "class_id")
	private int id;
	private String className;
	@OneToMany(mappedBy = "myclass", cascade = CascadeType.ALL)
	private Set<Student> students = new HashSet<Student>();

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

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

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

 Student

@Entity
public class Student {
	@Id
	@GeneratedValue
	@Column(name = "student_id")
	private int id;
	private String studentName;
	@ManyToOne(cascade=CascadeType.ALL)
	@JoinTable(name = "student_class", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "class_id"))
	private Class myclass;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public Class getMyclass() {
		return myclass;
	}

	public void setMyclass(Class myclass) {
		this.myclass = myclass;
	}
}

 test

@Test
	public void testOneToManyJoinTable() {
		session.beginTransaction();
		OneToMany.joinTable.Class c = new OneToMany.joinTable.Class();
		c.setClassName("classNmae");

		OneToMany.joinTable.Student s1 = new OneToMany.joinTable.Student();
		OneToMany.joinTable.Student s2 = new OneToMany.joinTable.Student();
		OneToMany.joinTable.Student s3 = new OneToMany.joinTable.Student();

		s1.setStudentName("s1");
		s2.setStudentName("s1");
		s3.setStudentName("s1");

		c.getStudents().add(s3);
		c.getStudents().add(s2);
		c.getStudents().add(s1);
		s3.setMyclass(c);
		s2.setMyclass(c);
		s1.setMyclass(c);

		session.save(c);

		session.getTransaction().commit();
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值