其实一对多(One_To_Many)和多对一(Many_To_One)只是一个角度上看的问题,例如:国->省->市,这是一个很典型的例子,顺着看,一个国家对应多个省,一个省对应多个城市,这是一对多(One_To_Many),那么反着来看就是多对一(Many_To_One),所以我们一般从主表的角度出发去判断它们的关系。
下面用hibernate的一对多(One_To_Many)关系:
国家--省份--城市,三者相互包含:
package com.zking.hibernate07.entity;
import java.util.HashSet;
import java.util.Set;
/**
*国家
*/
public class Nation {
private String nid;
private String nname;
//包含省份的集合
private Set<Province> sp=new HashSet<>();
public String getNid() {
return nid;
}
public void setNid(String nid) {
this.nid = nid;
}
public String getNname() {
return nname;
}
public void setNname(String nname) {
this.nname = nname;
}
public Set<Province> getSp() {
return sp;
}
public void setSp(Set<Province> sp) {
this.sp = sp;
}
public Nation(String nid, String nname, Set<Province> sp) {
super();
this.nid = nid;
this.nname = nname;
this.sp = sp;
}
public Nation() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "nation [nid=" + nid + ", nname=" + nname + "]";
}
}
-----------------------------------------------------------------------
package com.zking.hibernate07.entity;
import java.util.HashSet;
import java.util.Set;
/*
*省份
*/
public class Province {
private String pid;
private String pname;
//transient 不参与序列化 包含国家对象
private transient Nation nation;
//包含城市的集合
private Set<City> sc=new HashSet<>();
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public Nation getNation() {
return nation;
}
public void setNation(Nation nation) {
this.nation = nation;
}
public Set<City> getSc() {
return sc;
}
public void setSc(Set<City> sc) {
this.sc = sc;
}
public Province(String pid, String pname, Nation nation, Set<City> sc) {
super();
this.pid = pid;
this.pname = pname;
this.nation = nation;
this.sc = sc;
}
public Province() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Province [pid=" + pid + ", pname=" + pname + "]";
}
}
-----------------------------------------------------------------
package com.zking.hibernate07.entity;
/*
*城市
*/
public class City {
private String cid;
private String cname;
//包含省份的对象
private transient Province province;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Province getProvince() {
return province;
}
public void setProvince(Province province) {
this.province = province;
}
public City(String cid, String cname) {
super();
this.cid = cid;
this.cname = cname;
}
public City() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "City [cid=" + cid + ", cname=" + cname + "]";
}
}
那么hibernate,xml映射关系: