many2one
实例函数
public class Group {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class User {
private int id;
private String name;
private String password;
private Group group;
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
配置文件
Group.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zucc.model.Group" table="t_group">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" length="20"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zucc.model.User" table="user">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" length="20"/>
<property name="password" column="password"/>
<many-to-one name="group" foreign-key="user_groupID_group_id">
<column name="group_id"/>
</many-to-one>
</class>
</hibernate-mapping>
各属性含义:
<many-to-one
name="属性名"
column="外键字段名" //可选,默认与name同值。也可以用嵌套的 <column>元素。
class="关联的完整类名"//可选,默认是通过反射得到属性类型。
entity-name="被关联类的实体名" > //被关联类的实体名
lazy="true|false(默认)" //是否支持Lazy加载,默认为true
cascade="none(默认)|all|save-update|delete|delete-orphan" //级联风格可组合
//all : 所有操作都传递到相关联的对象
//save-update 保存和更新传递到相关联的对象。假定该配置文件的对象是主体,只有对主体save或者update时,该设置生效。
//delete 删除操作传递到相关联的对象
//delete-orphan : 所有操作都传递到相关联的对象 并删除不再与父对象关联的对象
fetch="join|select(默认)" // (可选 - 默认为 select ): 在外连接抓取(outer-join fetching)和序列选择抓取(sequential select fetching)两者中选择其一。
update="true(默认)|false"
insert="true(默认)|false" //同property的udpate、delete,是否更新和删除。
property-ref="关联类的属性值" // (可选) 指定关联类的一个属性,作为外键的值。 默认是关联类的主键。
not-found="ignore|exception(默认)" // property-ref引用的数据不存在时如何处理: ignore设为null。
access="field|property(默认)|ClassName" //Hibernate用来访问属性的策略。
unique="true|false" //使用DDL为外键字段生成一个唯一约束。此外, 这也可以用作 property-ref的目标属性。这 使关联同时具有 一对一的效果。
not-null="true|false" //使用DDL为外键字段生成一个非空约束。
optimistic-lock="true(默认)|false" //是否需要获得乐观锁定(optimistic lock),它决定这个属性发生脏数据时版本(version)的值是否增长。
</many-to-one>
insert="true(默认)|false" //同property的udpate、delete,是否更新和删除。
property-ref="关联类的属性值" // (可选) 指定关联类的一个属性,作为外键的值。 默认是关联类的主键。
not-found="ignore|exception(默认)" // property-ref引用的数据不存在时如何处理: ignore设为null。
access="field|property(默认)|ClassName" //Hibernate用来访问属性的策略。
unique="true|false" //使用DDL为外键字段生成一个唯一约束。此外, 这也可以用作 property-ref的目标属性。这 使关联同时具有 一对一的效果。
not-null="true|false" //使用DDL为外键字段生成一个非空约束。
optimistic-lock="true(默认)|false" //是否需要获得乐观锁定(optimistic lock),它决定这个属性发生脏数据时版本(version)的值是否增长。
</many-to-one>
数据库
one2many单向
实例函数
import java.util.Set;
public class Class {
private int cid;
private String name;
private Set<Student> students;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
public class Student {
private int sid;
private String name;
private Class class1;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Class getClass1() {
return class1;
}
public void setClass1(Class class1) {
this.class1 = class1;
}
}
Student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zucc.model">
<class name="Student" table="t_student">
<id name="sid" column="sid">
<generator class="native"/>
</id>
<property name="name" column="name" length="20"/>
</class>
</hibernate-mapping>
Class.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zucc.model">
<class name="Class" table="t_class">
<id name="cid" column="cid">
<generator class="native"/>
</id>
<property name="name"/>
<!-- name:Class中的Set类型的属性名。 order-by:对什么排序,默认为asc升序,desc降序。column:在student表生成一个字段和class表的id相关联。
foreign-key:外键名 。class:与Class表一对多相关联的类名。
-->
<set name="students" order-by="sid asc">
<key column="cid" foreign-key="fk_student_cid_class_cid"/>
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
数据库
one2many双向
实例函数和one2many单向一样
配置文件
Class.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zucc.model">
<class name="Class" table="t_class">
<id name="cid" column="cid">
<generator class="native"/>
</id>
<property name="name"/>
<!-- name:Class中的Set类型的属性名。 order-by:对什么排序,默认为asc升序,desc降序。column:在student表生成一个字段和class表的id相关联。
foreign-key:外键名 。class:与Class表一对多相关联的类名。
-->
<set name="students" order-by="sid asc">
<key column="cid" foreign-key="fk_student_cid_class_cid"/>
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
Student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zucc.model">
<class name="Student" table="t_student">
<id name="sid" column="sid">
<generator class="native"/>
</id>
<property name="name" column="name" length="20"/>
<many-to-one name="class1" foreign-key="fk_student_cid_class_cid">
<column name="cid"/>
</many-to-one>
</class>
</hibernate-mapping>
数据库
many2many单向
实例函数
public class User {
private int id;
private String name;
Set<Role> roles;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
import java.util.Set;
public class Role {
private int id;
private String name;
Set<User> users;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}
配置文件
Role.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zucc.model">
<class name="Role" table="t_role">
<id name="id" column="rid">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zucc.model">
<class name="Role" table="t_role">
<id name="id" column="rid">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
many2many双向
实例函数和User.hbm.xml和User.hbm.xml与many2many单向一样
Role.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zucc.model">
<class name="Role" table="t_role">
<id name="id" column="rid">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users" table="r_user_role">
<key column="rid" foreign-key="fk_userrole_rid_role_rid"/>
<many-to-many class="User" foreign-key="fk_userrole_rid_role_rid" column="uid"/>
</set>
</class>
</hibernate-mapping>
数据库
one2one单向
实例函数
public class IDCard {
private int id;
private String cardNum;
private User user;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCardNum() {
return cardNum;
}
public void setCardNum(String cardNum) {
this.cardNum = cardNum;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
public class User {
private int id;
private String name;
private IDCard idCard;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IDCard getIdCard() {
return idCard;
}
public void setIdCard(IDCard idCard) {
this.idCard = idCard;
}
}
one2one唯一外键
配置文件IDCard.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zucc.model.IDCard" table="t_idcard">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="cardNum" column="cardNum"/>
</class>
</hibernate-mapping>
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zucc.model.User" table="user">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" length="20"/>
<many-to-one name="idCard" foreign-key="fk_user_idcardid_idcard_id">
<column name="idcard_id" unique="true"/>
</many-to-one>
</class>
</hibernate-mapping>
one2one主键参照
配置文件
IDCard.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zucc.model.IDCard" table="t_idcard">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="cardNum" column="cardNum"/>
</class>
</hibernate-mapping>
User.hbm.xml(constrained="true"必须为true)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zucc.model.User" table="user">
<id name="id" column="id">
<!-- 主键生成策略:外键的方式 -->
<generator class="foreign">
<!-- 指定这个外键参照谁:参照自己的一个叫idcard属性的ID -->
<param name="property">idCard</param>
</generator>
</id>
<property name="name" column="name" length="20"/>
<!-- 为引用属性idcard配置映射关系 -->
<one-to-one name="idCard" foreign-key="fk_user_id_idcard_id" constrained="true"/>
</class>
</hibernate-mapping>
数据库
one2one双向
实例函数和one2one相同one2one唯一外键
配置文件
IDCard.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zucc.model.IDCard" table="t_idcard">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="cardNum" column="cardNum"/>
<!-- 添加一个one-to-one标签即可,提示Hibernate怎么去加载user,默认根据主键加载
property-ref:自己本身在另外一端的属性名
<one-to-one name="user"/>不能维护关联关系,所以通过IDCard保存User的关联关系是不成功的
<one-to-one>标签在保存的时候不能通过该标签配置的属性维护关联关系
-->
<one-to-one name="user" property-ref="idCard"/>
</class>
</hibernate-mapping>
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zucc.model.User" table="user">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" length="20"/>
<many-to-one name="idCard" foreign-key="fk_user_idcardid_idcard_id">
<column name="idcard_id" unique="true"/>
</many-to-one>
</class>
</hibernate-mapping>
one2one唯一外键
配置文件
IDCard.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<span style="white-space:pre"> </span><class name="com.zucc.model.IDCard" table="t_idcard">
<span style="white-space:pre"> </span><id name="id" column="id">
<span style="white-space:pre"> </span><generator class="native"/>
<span style="white-space:pre"> </span></id>
<span style="white-space:pre"> </span><property name="cardNum" column="cardNum"/>
<span style="white-space:pre"> </span><!-- 不能加property-ref属性,因为是主键参照 -->
<span style="white-space:pre"> </span><one-to-one name="user"/>
<span style="white-space:pre"> </span></class>
</hibernate-mapping>
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<span style="white-space:pre"> </span><class name="com.zucc.model.User" table="user">
<span style="white-space:pre"> </span><id name="id" column="id">
<span style="white-space:pre"> </span><!-- 主键生成策略:外键的方式 -->
<span style="white-space:pre"> </span><generator class="foreign">
<span style="white-space:pre"> </span><!-- 指定这个外键参照谁:参照自己的一个叫idcard属性的ID -->
<span style="white-space:pre"> </span><param name="property">idCard</param>
<span style="white-space:pre"> </span></generator>
<span style="white-space:pre"> </span></id>
<span style="white-space:pre"> </span><property name="name" column="name" length="20"/>
<span style="white-space:pre"> </span><!-- 为引用属性idcard配置映射关系 -->
<span style="white-space:pre"> </span><one-to-one name="idCard" foreign-key="fk_user_id_idcard_id" constrained="true"/>
<span style="white-space:pre"> </span></class>
</hibernate-mapping>