hibernate(One_To_Many)

      其实一对多(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映射关系:

国家----->一对多--------省份

省份----->多对一--------国家

省份----->一对多--------城市

城市----->多对一--------省份

cascade:指该对象状态改变从而影响其关联对象状态改变,例如:在添加国家的时候再添加省份再添加城市,级联关系

猜你喜欢

转载自blog.csdn.net/Mr_xiayijie/article/details/82593042