hibernate关联关系的整理
1、关联关系映射的步骤
1.1关联关系的搭建
---建表
---建实体
1.2映射关联关系
1.3使用测试
2、映射关联关系
1:1 双向 单向
*主表方:
//关系属性 *主表方:
//mappedBy="映射着外键的 对方中的属性" //关系属性
@OneToOne(mappedBy="person51") @OneToOne(mappedBy="person51")
private Passport passport51; @JoinColumn(name="person_id")//声明外键列是谁,自己维护外建
*从表方: private Passport passport51;
//关系属性 *从表方:
@OneToOne//声明关系 //无关系属性
@JoinColumn(name="person_id")//声明外键列是谁
private Person person51;
1:* 双向 单向
*主表方: *主表方:
@OneToMany(mappedBy="user") @OneToMany
*从表方 @JoinColumn(name="user_id")
@ManyToOne *从表方
@JoinColumn(name="user_id") 无关系属性
* :*
//关系属性
@ManyToMany02
/*
* name=关系表名称
* joinColumns=关系表中,指向自己的外键
* inverseJoinColumns=关系表中,指向对方的外键
*/
@JoinTable(name="rel_s_c",
joinColumns={@JoinColumn(name="cour_id")},
inverseJoinColumns={@JoinColumn(name="stu_id")})
*关系双方的映射,一致(双向都映射,单向只需一方映射 无主次)。
3、注意事项:
3.1 1:1---删除时需要在对方解除关系(与方向无关) 从.get(主).set从(null)
---为主表添加从表维护关系 (与方向无关): 从表.setXXX(主表)//使得从表有外键来源
---级联保存双方维护关系(双向): 从表.setXXX(主表) 主表.serXXX(从表)
---级联保存双方维护关系(单向): 只需有外键的一方维护外键
1:*---删除时不需要维护外键
---单向和双向的区别 --为主表附加从表 维护关系 主.set从(从) session.update(主);
--级联插入双方数据 维护关系 主.set从(从)
*:*---为一方附加另一方 另一方.set(一方) session.save(另一方)
---在已存在的双方之间搭建关系 一方.set(另一方) session.update(一方)
---级联保存 只在一方维护关系 A.set(B)
---单独删除一方无级联权限
---级联删除:慎用=不用
3.2 当更新 映射了外键的一方时,对象不能是new 出来的 (new 出来的对象关系不完整,
会导致hibernate去数据库中置空外键)
4、级联:
查询级联默认,不受级联级别限制
//获取表格选择行
var rows = $('#test1').datagrid('getSelections');
console.log(rows);
//判断是否选择行
if (!rows || rows.length == 0) {
$.messager.alert('提示', '请选择要删除的数据!', 'info');
return;
}
var parm;
//循环给提交删除参数赋值(音乐风格编码)
$.each(rows, function (i, n) {
if (i == 0) {
parm = "ids" + n.id;
} else {
parm += "&ids=" + n.id;
}
});
$.messager.confirm('提示', '是否删除选中数据?', function (r) {
if (!r) {
return;
}
//提交
$.post('${pageContext.request.contextPath}/category/dropCategory', parm,
function (msg) {
if (msg.IsSuccess) {
$.messager.alert('提示', msg.Message, 'info', function () {
//重新加载当前页
$('#test').datagrid('reload');
});
} else {
$.messager.alert('提示', msg.Message, 'info')
}
});
});
}