您的位置:首页 > 其它

基于mvc模式的应用框架之Hibernate(四)

2017-12-18 21:38 381 查看

一.Inverse属性的用法

inverse属性:是维护关联关系的时候起作用的。表示控制权是否转移(在一对一方起作用)

inverse:控制反转

inverse = false: 不反转,当前方有控制权

inverse = true:反转,当前方没有控制权

维护关联关系中

1).保存数据(有影响)

->如果设置控制反转,关联关系将不会维护,外键字段为NULL

2).获取数据(没有影响)

3).解除关联关系(有影响)

->inverse = false 可以解除关联关系

->inverse = true 当前方没有控制权,不能解除关联关系(不会生产Update语句)

4).删除数据对关联关系的影响(有影响)

->inverse = false 有控制权,可以删除,先清空外键引用,再删除数据。

->inverse = true 没有控制权,如果删除记录有被外键引用,会报错,违反主外键约束,如果删除记录没有引用,则可以直接删除。

二.cascade属性

cascade 表示级联操作 [可以设置到一的一方或者多的一方]

none: 不级联操作,默认值

save-update:级联保存更新删除

delete:级联删除

save-update;delete 级联保存,更新,删除

all:同上

级联操作在工作中基本上不会使用

三.多对多映射

1.需求

1).项目表

prj_id prj_name prj_date
1     APP项目
2     存管项目


2).项目员工关系表

prjid      did
1         1
1         3
1         2
2         1
2         4
2         3


3).开发人员表

d_id     d_name
1         小米
2         小王
3         二狗
4         小三


一个项目多个做,一个人可以同时做多个项目

2.javaBean设计

class Project
{
private int pri_id;
private String pri_name
//项目下的多个员工
private Set<Developer> developer
}

class Developer
{
private int d_id;
private String d_name;
private Set<Project> projects;
}


3.映射

项目方向

1).映射集合属性:“developer”

2).集合属性,对应的中间表

3).外键字段:prjid

4).外键对应字段,对应中间表字段did

5).集合属性元素的类型

开发人员方向

同上

4.源代码

javaBean代码

public class Developer
{
private int d_id;
private String d_name;
// 开发人员,参数的多个项目
private Set<Project> projects = new HashSet<Project>();

public int getD_id() {
return d_id;
}
public void setD_id(int dId) {
d_id = dId;
}
public String getD_name() {
return d_name;
}
public void setD_name(String dName) {
d_name = dName;
}
public Set<Project> getProjects() {
return projects;
}
public void setProjects(Set<Project> projects) {
this.projects = projects;
}
}

public class Project {
private int prj_id;
private String prj_name;
// 项目下的多个员工
private Set<Developer> developers = new HashSet<Developer>();

public int getPrj_id() {
return prj_id;
}
public void setPrj_id(int prjId) {
prj_id = prjId;
}
public String getPrj_name() {
return prj_name;
}
public void setPrj_name(String prjName) {
prj_name = prjName;
}
public Set<Developer> getDevelopers() {
return developers;
}
public void setDevelopers(Set<Developer> developers) {
this.developers = developers;
}
}


映射文件代码

多对多映射配置: 员工方

name 指定映射的集合属性

table 集合属性对应的中间表

key 指定中间表的外键字段(引用当前表t_developer主键的外键字段)

many-to-many

column 指定外键字段对应的项目字段

class 集合元素的类型

<?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="cn.itcast.c_many2many">
<class name="Developer" table="t_developer">
<id name="d_id">
<generator class="native"></generator>
</id>
<property name="d_name" length="20"></property>
<set name="projects" table="t_relation">
<key column="did"></key>
<many-to-many column="prjId" class="Project"></many-to-many>
</set>
</class>
</hibernate-mapping>


多对多映射:

1. 映射的集合属性: “developers”

2. 集合属性,对应的中间表: “t_relation”

3. 外键字段: prjId

4. 外键字段,对应的中间表字段: did

5. 集合属性元素的类型

<?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="cn.itcast.c_many2many">
<class name="Project" table="t_project">
<id name="prj_id">
<generator class="native"></generator>
</id>
<property name="prj_name" length="20"></property>
<set name="developers" table="t_relation" cascade="save-update" inverse="true">
<key column="prjId"></key>
<many-to-many column="did" class="Developer"></many-to-many>
</set>
</class>
</hibernate-mapping>


四.维护关联关系

1.保存数据–有影响

2.获取数据–无影响

3.解除关系–有影响

4.删除数据–有影响
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate mvc 框架 应用