Hibernate的一对多,多对一以及多对多

一对多和多对一

创建两个类Group和User(一个小组有多个用户形成多对一和一对多的关系)
1.多对一
创建Group字段

private Group group;

在getGroup()方面添加@manyToOne注解

@ManyToOne
	public Group getGroup() {
		return group;
	}

2.一对多
创建Group类时创建一个Set集合来保存多的一方

private Set<User> users = new HashSet<User>();

同样的添加@oneTomany注解但是得再添加@joinColumn注解,不产生第三张表

    @OneToMany
	@JoinColumn(name="group_id")
	public Set<User> getUsers() {
		return users;
	}

一对多 多对一双向

再Group类中创建set集合字段,又在User中创建group字。
在getgroup方法上添加@ManyToOne注解。
在getUsers方法上面添加@OneToMany注解。注意(得在少的一方中添加@OneToMany(mappedBy=“group”))

/*
	 * 多对一和一对多的双向使一样的
	 * 少的地方设置mappedby,使得减少字段冗余(hibernate会在创表的时候多写一个id)。
	 * 这样考虑多的一方,以多的一方会主导。
	 */
	@OneToMany(mappedBy="group")
	public Set<User> getUsers() {
		return users;
	}

多对多(双向)

创建Teacher和Student表(一个学生多个老师,一个老师有多个学生,形成多对多的关系)
每个类中创建对应的set字段集合

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

在双方get方法上面添加@manyTomany注解,在任意一方添加@joinTable注解(多对多的关系建立利用第三张表记录多表和多表的主键)

    /*name修改表名
	*joinColumns={@JoinColumn(name="teacher_id")}指定此类表中主键别名
	* inverseJoinColumns={@JoinColumn(name="student_id")}指定
	* 对应类表的主键别名
	*/
	@ManyToMany
	@JoinTable(
			name="t_s",
			joinColumns={@JoinColumn(name="teacher_id")},
			inverseJoinColumns={@JoinColumn(name="student_id")}
			)
@ManyToMany(mappedBy="students")
public Set<Teacher> getTeachers() {
		return teachers;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值