一对多和多对一
创建两个类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;
}