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();
}
}