hibernate关联映射

来源:互联网 发布:天猫淘宝店费用预算 编辑:程序博客网 时间:2024/05/29 14:26

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>

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"/><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>  

数据库



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>
数据库







1 0
原创粉丝点击