hibernate的关联映射分为单向关联和双向关联
单向关联
- 一对一外键关联
- 一对一主键关联
- 一对一连接表单向关联
- 一对多外键单向关联
- 一对多连接表单向关联
- 多对一外键单向关联
- 多对一连接表单向关联
- 多对多单向关联
双向关联
- 一对一外键双向关联
- 一对一主键双向关联
- 一对一连接表双向关联
- 一对多外键双向关联
- 一对多连接表双向关联
- 多对多双向关联
一对一外键单向关联
事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射也非常相似。只需要将原来的many-to-one元素增加unique="true"属性,用于表示N的一端必须是唯一的,在N的一端增加了唯一的约束,即成为单向1-1。
基于外键的单向1-1的配置将与无连接表N-1关联的many-to-one增加unique="true"属性即可。
一、模型介绍
一个人(Person)对应一个地址(Address)
二、数据库表设计
![address表]
(https://img-blog.youkuaiyun.com/20150522165340386)
三、实体类
对应数据库person表的实体类(person.java)
package org.iep.model.hibernate;
public class Person {
private int personid;
private String name;
private int age;
private Address address;
public int getPersonid() {
return personid;
}
public void setPersonid(int personid) {
this.personid = personid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
数据表(address)
package org.iep.model.hibernate;
public class Address {
private int addressid;
private String addressname;
public int getAddressid() {
return addressid;
}
public void setAddressid(int addressid) {
this.addressid = addressid;
}
public String getAddressname() {
return addressname;
}
public void setAddressname(String addressname) {
this.addressname = addressname;
}
}
四、映射方法
Person.hbm.xml
<?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 2015-5-22 17:02:43 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="org.iep.model.hibernate.Person" table="person">
<id name="personid" type="int">
<column name="PERSONID" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="age" type="int">
<column name="AGE" />
</property>
<many-to-one name="address" class="org.iep.model.hibernate.Address" unique="true" fetch="join">
<column name="addressid" />
</many-to-one>
</class>
</hibernate-mapping>
Address.hbm.xml
<?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 2015-5-22 17:02:43 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="org.iep.model.hibernate.Address" table="address">
<id name="addressid" type="int">
<column name="ADDRESSID" />
<generator class="native" />
</id>
<property name="addressname" type="java.lang.String">
<column name="ADDRESSNAME" />
</property>
</class>
</hibernate-mapping>