首页 > 学院 > 开发设计 > 正文

Hibernate 关系映射

2019-11-06 08:02:45
字体:
来源:转载
供稿:网友

一对多、多对一、多对多

表结构

多表

uid name cid

“一”表

cid na

“中间”表

uid coid

“一” 的Bean

public class Cla { PRivate int cid; private String name; private Set<User> users = new HashSet<User>(); public Cla() { } public Cla(int cid, String name) { this.cid = cid; this.name = name; } 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<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; }}

“多”的 Bean

public class User { private int uid; private String name; private Cla cla; private Set<Course> courses = new HashSet<Course>(); public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Cla getCla() { return cla; } public void setCla(Cla cla) { this.cla = cla; } public Set<Course> getCourses() { return courses; } public void setCourses(Set<Course> courses) { this.courses = courses; } @Override public String toString() { return "User{" + "uid=" + uid + ", name='" + name + '/'' + ", cla=" + cla + ", courses=" + courses + '}'; }

“一”的配置文件

<hibernate-mapping> <class name="com.vo.Cla" table="cla" catalog="hibernate"> <id name="cid" type="java.lang.Integer"> <column name="cid"/> </id> <property name="name" type="java.lang.String"> <column name="Name" length="50"/> </property> <set name="users" inverse="false"><!-- name=“多”的属性 inverse=不反转控制权 --> <key column="cid"/><!-- column=表User的外键 --> <one-to-many class="com.vo.User"/><!-- class=“多”的表 --> </set> </class> </hibernate-mapping>

“多”的配置文件

<hibernate-mapping> <class name="com.vo.User" table="user" catalog="hibernate"> <id name="uid" type="java.lang.Integer"> <column name="uid"/> </id> <property name="name" type="java.lang.String"> <column name="Name" length="50"/> </property> <!--多对一“多”的配置--> <many-to-one name="cla" column="cid" class="com.vo.Cla" cascade="save-update" /><!-- name="多"类内属性 column=“多”的外键列名 class=“一”的类 --> <!--多对多的配置--> <set name="courses" table="user_course" inverse="false" cascade="save-update" ><!-- name="多"类内属性 table="中间表名" inverse= false 不反转控制权(获得控制权) cascade="级联关系"--> <key column="uid"/><!--中间表中对应本表的外键列名--> <many-to-many column="coid" class="com.vo.Course" /><!--column=中间表中对应另一个表的外键列名 class=另一个“多”的类名--> </set> </class> </hibernate-mapping>

级联属性cascade几种取值:

cascade 说明
save-update 级联保存(load以后如果子对象发生了更新,也会级联更新). 但它不会级联删除
delete 级联删除, 但不具备级联保存和更新
all-delete-orphan 在解除父子关系时,自动删除不属于父对象的子对象, 也支持级联删除和级联保存更新
all 级联删除, 级联更新,但解除父子关系时不会自动删除子对象.
delete-orphan 删除所有和当前对象解除关联关系的对象
none

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表