这里是主控端统一为范围大的一方或者起主要作用的一方。
------该博客仅为个人学习备忘所用,所有错漏欢迎指正。
单向一对一外键关联映射:
package demo.pojo.o_o2o;
public class Account {
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private Integer id;
private String name ;
private Address address ;
}
package demo.pojo.o_o2o;
public class Address {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private Integer id ;
private String address ;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 单向一对一外键关联主控端 -->
<hibernate-mapping>
<class name="demo.pojo.o_o2o.Account" table="t_account">
<!-- 生成对象唯一的id -->
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" />
<!--因为是外键,所以使用 many-to-one,
通过many-to-one 生成主控对被控的多对一关系,
再通过unique="true" 建立主控对被控的一对一关系,
column="address_id"为主控端用于连接被控端所对应的表中的列 -->
<many-to-one name="address" column="address_id" unique="true" />
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 单向一对一外键关联被控端 -->
<hibernate-mapping>
<class name="demo.pojo.o_o2o.Address" table="t_address">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="address"></property>
</class>
</hibernate-mapping>
单向一对一主键关联映射:
package demo.pojo.o_o2o;
public class Citizen {
public IDCard getIdCard() {
return idCard;
}
public void setIdCard(IDCard idCard) {
this.idCard = idCard;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private Integer id;
private String name;
private IDCard idCard;
}
package demo.pojo.o_o2o;
public class IDCard {
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
private Integer id;
private String cardNo;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 单向一对一主键关联主控端 -->
<hibernate-mapping>
<class name="demo.pojo.o_o2o.Citizen" table="t_citizen">
<id name="id">
<!-- 生成id时需要指明id为“foreign”,
也就是主控端的id是另一张表的外键, -->
<generator class="foreign" >
<!-- name="property"为“foreign”指明要设置的外键为一个实体类,
idCard是主控端对被控端的引用的名称 -->
<param name="property">idCard</param>
</generator>
</id>
<property name="name" />
<!-- 这里需要指明是一对一关系,
name="idCard"为param的值,
并且需要设置关联限制constrained="true" -->
<one-to-one name="idCard" constrained="true" />
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 单向一对一主键关联被控端 -->
<hibernate-mapping>
<class name="demo.pojo.o_o2o.IDCard" table="t_idcard">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id>
<property name="cardNo" />
</class>
</hibernate-mapping>
单向一对多关联映射:
package demo.pojo.o_o2m;
import java.util.Set;
public class ProvincePK {
public Set<CityPK> getCityPK() {
return cityPK;
}
public void setCityPK(Set<CityPK> cityPK) {
this.cityPK = cityPK;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
private Integer id;
private String province;
private Set<CityPK> cityPK;
}
package demo.pojo.o_o2m;
public class CityPK {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
private Integer id;
private String city;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 单向一对多关联主控端 -->
<hibernate-mapping>
<class name="demo.pojo.o_o2m.ProvincePK" catalog="hours" table="t_province">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<!-- name="cityPK"为引用对象cityPK的名称 -->
<set name="cityPK" cascade="all">
<!-- column="provincePK"为要在cityPK表中生成的外键列的名称 -->
<key column="provincePK" />
<one-to-many class="demo.pojo.o_o2m.CityPK" />
</set>
<property name="province" type="java.lang.String">
<column name="province" />
</property>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 单向一对多主键关联被控端 -->
<hibernate-mapping>
<class name="demo.pojo.o_o2m.CityPK" catalog="hours" table="t_city">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="city" type="java.lang.String">
<column name="city" />
</property>
</class>
</hibernate-mapping>
单向多对一关联映射:
package demo.pojo.o_m2o;
public class ProvincePK {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
private Integer id;
private String province;
}
package demo.pojo.o_m2o;
public class CityPK {
public ProvincePK getProvincePK() {
return provincePK;
}
public void setProvincePK(ProvincePK provincePK) {
this.provincePK = provincePK;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
private Integer id;
private String city;
private ProvincePK provincePK;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 单向多对一关联主控端 -->
<hibernate-mapping>
<class name="demo.pojo.o_m2o.ProvincePK" catalog="hours" table="t_province">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="province" type="java.lang.String">
<column name="province" />
</property>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 单向多对一关联被控端 -->
<hibernate-mapping>
<class name="demo.pojo.o_m2o.CityPK" catalog="hours" table="t_city">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="city" type="java.lang.String">
<column name="city" />
</property>
<!-- name="provincePK"表示所引用的ProvincePK的对象,
column="provincePK" 为对应ProvincePK的对象所要生成的列 -->
<many-to-one name="provincePK" column="provincePK" not-null="true" />
</class>
</hibernate-mapping>
多对多关联映射:
package demo.pojo.ot_m2m;
import java.util.Set;
public class Course {
public Set<Student> getStudentsList() {
return studentsList;
}
public void setStudentsList(Set<Student> studentsList) {
this.studentsList = studentsList;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
private Integer id;
private String title;
private Set<Student> studentsList;
}
package demo.pojo.ot_m2m;
import java.util.Set;
public class Student {
public Set<Course> getCoursesList() {
return coursesList;
}
public void setCoursesList(Set<Course> coursesList) {
this.coursesList = coursesList;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private Integer id;
private String name;
private Set<Course> coursesList;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 多对多关联 -->
<hibernate-mapping>
<class name="demo.pojo.ot_m2m.Course" catalog="hours" table="t_course">
<id name="id" column="id" type="java.lang.Integer" >
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="title"/>
</property>
<!-- name="studentsList" 表示所引用的学生类的对象,
课程类中的课程所相对应的一组学生,
例如:一门语文课对应一堆学语文的学生 -->
<set name="studentsList" table="stu_course" >
<!-- column="coursesList"表示在第三张表中生成课程id的列,
每一个学生在这一列中都会分配到一个课程id,对应相应的课程 -->
<key column="coursesList" />
<!-- class="demo.pojo.ot_m2m.Student" 为要指向的关联的类,
column="studentsList"为用什么和这个类关联 -->
<many-to-many class="demo.pojo.ot_m2m.Student" column="studentsList"></many-to-many>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 多对多关联 -->
<hibernate-mapping>
<class name="demo.pojo.ot_m2m.Student" catalog="hours" table="t_student" >
<id name="id" column="id" type="java.lang.Integer" >
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="stuName"/>
</property>
<!-- 和课程的道理相似 -->
<set name="coursesList" table="stu_course" >
<!-- column="studentsList" 表示在第三张表中生成学生id的列,
里面会有每一个学生的id,旁边"coursesList"列对应的是该学生有修的课程 -->
<key column="studentsList" />
<!-- 和课程的道理相似 -->
<many-to-many class="demo.pojo.ot_m2m.Course" column="coursesList" ></many-to-many>
</set>
</class>
</hibernate-mapping>
双向一对一主键关联映射:
package demo.pojo.t_o2o;
public class Citizen_t {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IDCard_t getIdCard_t() {
return idCard_t;
}
public void setIdCard_t(IDCard_t idCard_t) {
this.idCard_t = idCard_t;
}
private Integer id ;
private String name ;
private IDCard_t idCard_t;
}
package demo.pojo.t_o2o;
public class IDCard_t {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getCardNo() {
return cardNo;
}
public void setCardNo(Integer cardNo) {
this.cardNo = cardNo;
}
public Citizen_t getCitizen_t() {
return citizen_t;
}
public void setCitizen_t(Citizen_t citizen_t) {
this.citizen_t = citizen_t;
}
private Integer id ;
private Integer cardNo;
private Citizen_t citizen_t;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 双向一对一主键关联主控端 -->
<hibernate-mapping >
<class name="demo.pojo.t_o2o.Citizen_t" table="t_citizen">
<id name="id" column="id" type="java.lang.Integer" >
<!-- 主键关联要把id的生成策略改为foreign,也就是外部引用,
下面的param标签需要指明用什么生成,也就是要用被控端的IDCard_t引用对象 -->
<generator class="foreign">
<param name="property">idCard_t</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="citizenName" />
</property>
<!-- 这里需要指明关联的类型,为一对一,
name="idCard_t"为IDCard_t类中Citizen_t的引用对象,同样要和上面param标签是值一样,
constrained="true"为必要属性,否则数据库的数据可以随意修改,最后导致数据混乱 -->
<one-to-one name="idCard_t" constrained="true"/>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 双向一对一主键关联被控端 -->
<hibernate-mapping>
<class name="demo.pojo.t_o2o.IDCard_t" table="t_idcard" >
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"></generator>
</id>
<property name="cardNo" type="java.lang.Integer">
<column name="cardNo" />
</property>
<!-- 在被控端添加在属性为说明这是双向的啊啊啊! -->
<one-to-one name="citizen_t"></one-to-one>
</class>
</hibernate-mapping>
双向一对一外键关联映射:
package demo.pojo.t_o2o;
public class Account {
public Address getAddress_id() {
return address_id;
}
public void setAddress_id(Address address_id) {
this.address_id = address_id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private Integer id;
private String name ;
private Address address_id ;
}
package demo.pojo.t_o2o;
public class Address {
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private Integer id ;
private String address ;
private Account account;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 双向一对一外键关联主控端 -->
<hibernate-mapping>
<class name="demo.pojo.t_o2o.Account" table="t_account">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" />
<!-- 和单向一对一外键关联主控端一样 -->
<many-to-one name="address_id" column="address_id" unique="true" />
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 双向一对一外键关联被控端 -->
<hibernate-mapping>
<class name="demo.pojo.t_o2o.Address" table="t_address">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="address"></property>
<!-- 既然双向,在被控端也需要设置,
这里的主键已经唯一,所以不用many-to-one,
name="account"为实体类,在数据表中并不生成,用于和主控端生成关系
property-ref="address_id"为设置主控端的address_id作为连接的外键,
若不设置则默认使用主控端的主键作为连接,
不使用property-ref属性则可能产生两边的连接对不上,
例如主控端id为:1,被控端name="account"的值为2 -->
<one-to-one name="account" property-ref="address_id" />
</class>
</hibernate-mapping>
双向一对多关联映射:
package demo.pojo.t_o2m;
import java.util.Set;
public class Area {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAreaName() {
return areaName;
}
public void setAreaName(String areaName) {
this.areaName = areaName;
}
public Set<Street> getStreets() {
return streets;
}
public void setStreets(Set<Street> streets) {
this.streets = streets;
}
private Integer id ;
private String areaName;
private Set<Street> streets;
}
package demo.pojo.t_o2m;
public class Street {
public String getStreetName() {
return streetName;
}
public void setStreetName(String streetName) {
this.streetName = streetName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Area getArea() {
return area;
}
public void setArea(Area area) {
this.area = area;
}
private Integer id ;
private String streetName;
private Area area;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 双向一对多关联主控端,双向的一对多和多对一其实是一样的 -->
<hibernate-mapping>
<class name="demo.pojo.t_o2m.Area" catalog="hours" table="t_area">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id>
<property name="areaName" column="areaName" type="java.lang.String" />
<!-- name="streets"添加引用对象的名称,由于是一个set集合,所以必须设置下面的class属性
column="area"为要在被控端生成的列的名称,
class="demo.pojo.t_o2m.Street"为设置要指向的类 -->
<set name="streets" >
<key column="area"></key>
<one-to-many class="demo.pojo.t_o2m.Street" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 双向一对多关联被控端,双向的一对多和多对一其实是一样的 -->
<hibernate-mapping>
<class name="demo.pojo.t_o2m.Street" catalog="hours" table="t_street">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"></generator>
</id>
<property name="streetName" type="java.lang.String" column="streetName" />
<!-- name="area"表示用什么之主控端关联,为Street类中Area引用的对象名称,
class=""属性可以不要,因为name="area"已经有类指向了
由于上面class标签中没有指明包名,所以这里需要填写详细路径
column="area"属性的值必须是和主控端配置文件定义的一样,
如果不一样就会多生成一个多余的列并且不能通过引用的Area来取得Area -->
<many-to-one name="area" column="area"/>
</class>
</hibernate-mapping>
双向多对一关联映射:
package demo.pojo.t_o2m;
import java.util.Set;
public class ProvincePK {
public Set<CityPK> getCityPK() {
return cityPK;
}
public void setCityPK(Set<CityPK> cityPK) {
this.cityPK = cityPK;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
private Integer id;
private String province;
private Set<CityPK> cityPK;
}
package demo.pojo.t_o2m;
public class CityPK {
public ProvincePK getProvincePK() {
return provincePK;
}
public void setProvincePK(ProvincePK provincePK) {
this.provincePK = provincePK;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
private Integer id;
private String city;
private ProvincePK provincePK;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 双向多对一关联主控端 -->
<hibernate-mapping>
<class name="demo.pojo.t_o2m.ProvincePK" catalog="hours" table="t_province">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="province" type="java.lang.String">
<column name="province" />
</property>
<set name="cityPK" cascade="all">
<key column="cityPK" />
<one-to-many class="demo.pojo.t_o2m.CityPK"/>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 双向多对一关联被控端 -->
<hibernate-mapping>
<class name="demo.pojo.t_o2m.CityPK" catalog="hours" table="t_city">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="city" type="java.lang.String">
<column name="city" />
</property>
<many-to-one name="provincePK" column="cityPK" />
</class>
</hibernate-mapping>
一对多都多对一自身关联映射:
package demo.pojo.self;
import java.util.Set;
public class City {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
public Set<City> getSelfCity() {
return selfCity;
}
public void setSelfCity(Set<City> selfCity) {
this.selfCity = selfCity;
}
private Integer id;
private String cityName;
private City city;
private Set<City> selfCity;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 一对多都多对一自身关联 -->
<hibernate-mapping>
<class name="demo.pojo.self.City" catalog="hours" table="t_city">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="cityName" type="java.lang.String">
<column name="cityName" />
</property>
<!-- 主控端和被控端都是自己 -->
<set name="selfCity" inverse="true">
<key column="cityID"></key>
<one-to-many class="demo.pojo.self.City"/>
</set>
<many-to-one name="city" column="cityID" />
</class>
</hibernate-mapping>