Hibernate 表的关系 一对多

package com.lj.entity;

public class City {
	private Integer cid;
	private String cname;
	
	//找到城市就要找到该城市对应的一个省份的对象
	private Province province;
	
	public Integer getCid() {
		return cid;
	}
	public void setCid(Integer 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() {
		super();
	}
	public City(String cname) {
		super();
		this.cname = cname;
		
	}
	
	
}

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2019-7-9 14:40:54 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.lj.entity.City" table="CITY">
        <id name="cid" type="java.lang.Integer">
            <column name="CID" />
            <generator class="native" />
        </id>
        <property name="cname" type="java.lang.String">
            <column name="CNAME" />
        </property>
       
        
        <!-- 添加多对一的配置 多个城市对应一个省份对象 省份属性 -->
        <many-to-one name="province" class="com.lj.entity.Province" column="pid"></many-to-one>
    </class>
</hibernate-mapping>

package com.lj.entity;

import java.util.HashSet;
import java.util.Set;

public class Province {
	private Integer pid;
	private String pname;
	
	//添加省份下的多个城市集合
	private Set<City> cities=new HashSet<City>();
	
	
	public Integer getPid() {
		return pid;
	}
	public void setPid(Integer pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public Province(String pname) {
		super();
		this.pname = pname;
	}
	public Province() {
		super();
	}
	public Set<City> getCities() {
		return cities;
	}
	public void setCities(Set<City> cities) {
		this.cities = cities;
	}
	
	

}

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2019-7-9 14:40:54 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.lj.entity.Province" table="PROVINCE">
        <id name="pid" type="java.lang.Integer">
            <column name="PID" />
            <generator class="native" />
        </id>
        <property name="pname" type="java.lang.String">
            <column name="PNAME" />
        </property>
        
        <!-- 配置省份中城市的集合属性
        	 inverse:维护关系反转给 城市
        	 少的一方级联 cascade
        	 
        	 多的一方维护关系 inverse
        
         -->
        <set name="cities" cascade="all" inverse="true">
        	<!-- 城市表中的外键 -->
        	<key column="pid"></key>
        	
        	<!-- 配置一对多的关系 -->
        	<one-to-many class="com.lj.entity.City"/>
        </set>
        
    </class>
</hibernate-mapping>

package com.lj.test;

import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.lj.entity.City;
import com.lj.entity.Province;

public class TestOneToMany {
	private Session session;
	private Transaction transaction;

	@Test
	public void test() {
		//添加省份同时添加省份的城市
		/*Province p=new Province("湖南省");
		City c=new City("长沙市");
		City c1=new City("株洲市");
		City c2=new City("湘潭市");
		//互设
		//省份集合添加城市
		p.getCities().add(c);
		p.getCities().add(c1);
		p.getCities().add(c2);
		//给城市设置省份
		c.setProvince(p);
		c1.setProvince(p);
		c2.setProvince(p);
		
		//添加到数据库
		session.save(p);*/
		
		//查询一个省份同时查询这个省份对应的城市
		/*Province p=session.get(Province.class, 1);
		System.out.println(p.getPname());
		Set<City> cities=p.getCities();
		for (City c : cities) {
			System.out.println(c.getCname()+"\t"+c.getCid());
		}*/
		//查询一个城市同时查询这个城市对应的省份
		/*City c=session.get(City.class, 1);
		System.out.println(c.getCname()+c.getProvince().getPname()+c.getProvince().getPid());
		
		*/
		
		//删除一个省份同时删除省份对应的城市
		/*Province p=session.get(Province.class, 2);
		p.setCities(null);
		session.delete(p);*/
		
		//删除一个城市 删除它的省份
		/*City c=session.get(City.class, 7);
		session.delete(c);*/
		
		//给一个省份添加一个新的城市
		/*Province p=session.get(Province.class, 3);
		City c=new City("张家界市");
		p.getCities().add(c);
		c.setProvince(p);
		session.save(c);*/
		
		//给一个城市**重新设置**省份  

		Province p=session.get(Province.class, 3);
		City c=session.get(City.class, 4);
		
		p.getCities().add(c);
		c.setProvince(p);
		
		
	}
	
	
	
	@Before
	public void Before() {
		Configuration configuration=new Configuration().configure();
		SessionFactory factory=configuration.buildSessionFactory();
		session = factory.openSession();
		transaction = session.beginTransaction();
	}
	
	
	@After
	public void after() {
		transaction.commit();
		session.close();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值