Hibernate关联映射
- 格式:docx
- 大小:22.78 KB
- 文档页数:11
Hibernate多对一关联映射首先有两个实体,User和Group这里多对一,所以以多的一方为主控方。
(即为:User)package org.hibernate.many2one1.entity;import java.util.Date;/*** User generated by hbm2java*/public class User implements java.io.Serializable {private Integer id;private String name;private Group group;public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return ;}public void setName(String name) { = name;}}Group.javapackage org.hibernate.many2one1.entity;// Generated 2010-8-27 14:37:02 by Hibernate Tools 3.2.1.GA /*** Group generated by hbm2java*/public class Group implements java.io.Serializable {private int int_;private String name;public int getInt_() {return int_;}public void setInt_(int int_) {this.int_ = int_;}public String getName() {return name;}public void setName(String name) { = name;}}User.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "/hibernate-mapping-3.0.dtd"><!-- Generated 2010-8-27 14:33:42 by Hibernate Tools 3.2.1.GA --><hibernate-mapping><class name="er" table="user" catalog="ibatisdb"><id name="id" type="ng.Integer"><column name="id_" /><generator class="identity" /></id><property name="name" type="string"><column name="name_" length="50" /></property><many-to-one name="group" column="groupid_" cascade="all"/></class></hibernate-mapping><many-to-one name="group" column="groupid_" cascade="all"/>这句话的意思是说,在User表里会自动的加上一个groupid_字段作为外键。
cascade="all"是指级联关系,即操作User的话group也会跟着被更新。
多对一的意思:就是在多的一端(User)加上外键,指向一的一端(Group)关联映射的本质,将关联关系映射到数据库中,关联关系是指对象模型中的一个或者多个引用。
例如本例中User实体中的private Group group;<many-to-one>标签,会在多的一端添加一个外键,指向一的一端。
这个外键是由<many-to-one>中column="groupid_"来指定的。
一对多关联(单向)其实一对多就是多对一的相反,所以这里我们还是使用上一篇中的实体类。
不过略有变化,是以一的一方为主控方。
Group.javapackage org.hibernate.many2one1.entity;// Generated 2010-8-27 14:37:02 by Hibernate Tools 3.2.1.GAimport java.util.HashSet;import java.util.Set;/*** Group generated by hbm2java*/public class Group implements java.io.Serializable {private int int_;private String name;private Set<User> users = new HashSet<User>();public Set<User> getUsers() {return users;}public void setUsers(Set<User> users) {ers = users;}public int getInt_() {return int_;}public void setInt_(int int_) {this.int_ = int_;}public String getName() {return name;}public void setName(String name) { = name;}}User.javapackage org.hibernate.many2one1.entity;// Generated 2010-8-27 14:33:39 by Hibernate Tools 3.2.1.GAimport java.util.Date;/*** User generated by hbm2java*/public class User implements java.io.Serializable {private Integer id;private String name;public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return ;}public void setName(String name) { = name;}}Group.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "/hibernate-mapping-3.0.dtd"><!-- Generated 2010-8-27 14:37:02 by Hibernate Tools 3.2.1.GA --><hibernate-mapping><class name="org.hibernate.many2one1.entity.Group" table="group" catalog="ibatisdb"> <id name="int_" type="int"><column name="int" /><generator class="assigned" /></id><property name="name" type="string"><column name="name" length="20" /></property><Set name="users"><key column="groupid_"/><one-to-many class="er"/></Set></class></hibernate-mapping>多对一关联映射:在多的一端添加一个外键指向一的一端,主控方是多的一端。
一对多关联映射:在多的一端添加一个外键指向一的一端,主控方是一的一端。
所以一对多和多对一关联映射的策略是一致的,只是站的角度不同。
下面来看看双向关联。
User实体需要改变:package org.hibernate.many2one1.entity;// Generated 2010-8-27 14:33:39 by Hibernate Tools 3.2.1.GAimport java.util.Date;/*** User generated by hbm2java*/public class User implements java.io.Serializable {private Integer id;private String name;private Group group;public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return ;}public void setName(String name) { = name;}}User.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "/hibernate-mapping-3.0.dtd"><!-- Generated 2010-8-27 14:33:42 by Hibernate Tools 3.2.1.GA --><hibernate-mapping><class name="er" table="user" catalog="ibatisdb"><id name="id" type="ng.Integer"><column name="id_" /><generator class="identity" /></id><property name="name" type="string"><column name="name_" length="50" /></property><many-to-one name="group" column="groupid_"/></class></hibernate-mapping><many-to-one name="group" column="groupid_" inverse="true"/>这里的groupid必须和group.hbm.xml中的<key column="groupid_"/>一样。