在实际应用中,更常用的不是一对一的关系,而是多对一或者一对多的关系。在Hibernate中提供了对应的Annotation注解。
一、多对一 @ManyToOne
首先建两个实体类,在本例中分别是Manager.java和Manager_Group.java,其中一个group对应多个manager。
Manager.java:(部分代码见下)
private Manager_Group m_grp;
@ManyToOne
@JoinColumn(name = "groupId", referencedColumnName = "groupId")
public Manager_Group getM_grp() {
return m_grp;
}
在该类中建立“一”对象的属性,m_grp,在其getter方法上加上@ManyToOne注解即可。此时生成的表为:
可见其groupId被设置为MUL,即可以重复。并且在这里添加了一条外键约束,参考group表中的groupId。
二、多对一@OneToMany
首先建两个实体类,在本例中分别是Manager.java和Manager_Group.java,其中一个group对应多个manager。
Manager_Group.java:
private Set<Manager> Managers = new HashSet<Manager>();
@OneToMany
@JoinColumn(name="groupId",referencedColumnName="groupId")
public Set<Manager> getManagers() {
return Managers;
}
在该类中建立“多”对象的属性,Managers,在其getter方法上加上@OneToMany注解即可,此时生成的表为:
有点奇怪的是这里没有生成外键约束,如果去掉joinColumn中的referencedColumnName的话,默认会生成一条指向group表主键的
外键。疑问。。。待解决。。。
三、一对多,多对一双向映射。
在学习了一对一的双向映射之后,来看一对多多对一的双向映射就很容易了。在“一”方和“多”方分别添加上述的属性以及对应的
Annotation,同时在“多”方的@OneToMany加入mappedBy属性并设置为“一”方的属性值即可。
Manager.java:
private Manager_Group m_grp;
@ManyToOne
@JoinColumn(name = "groupId", referencedColumnName = "groupId")
public Manager_Group getM_grp() {
return m_grp;
}
Manager_Group.java:
@OneToMany(mappedBy="m_grp")
//@JoinColumn(name="group_Id",referencedColumnName="groupId")
public Set<Manager> getManagers() {
return Managers;
}
此时的表结构为: