当前位置:编程学习 > JAVA >>

hibernate多对一删除问题

有两个类
部门信息表
id 部门编号(主键)
name 部门名称
员工表
id 员工编号(主键)
name 员工名称
dept_id 部门编号(外键)

现在想删除部门编号为2下的所有员工,用hibernate怎么删除?
在员工类里是这样定义的
private int id;
private String name;
private Dept dept(设置关联关系)

因为dept对象不和数据库一一对应,想根据部门编号删除员工的话,传一个HQL语句,delete from Staff(员工类) where dept_id=2,能这样写吗,dept应该是属性吧, --------------------编程问答-------------------- 现在是根据外键进行删除和查询,而外键对应的是一个对象不是一个属性,怎么根据一个对象进行删除和查询呢? --------------------编程问答-------------------- 建议自己试一下用hibernate建表,就用这个例子,首先数据库中没有表。hibernate建表后,看看自动生成的字段对应的值,用几个值测试一下,增删改查,对你问的dept是什么就清楚了。至于其他,都自己试验一下,能自己试验的就不问,没头绪的才问一下 --------------------编程问答-------------------- --------------------编程问答-------------------- 看看cascade吧。你问的应该就是级联问题。

不用级联也可以,做一个循环,把2下员工清理了再delete部门就可以了。(注意constraint) --------------------编程问答-------------------- 问题在于不用sql语句,用hibernate 怎么把把2下员工清理了? --------------------编程问答-------------------- 设置级联删除啊。 才One的一方设置cascade-delete="true"就可以啦。好像是这个属性,去查查看吧 --------------------编程问答-------------------- 我这个不是级联删除,我只删除多的一方,只删除部门为2下的所有员工,不删除部门为2的部门信息。 --------------------编程问答-------------------- 用 观察者模式 (OBSERVER) 做啊 --------------------编程问答-------------------- 您能具体写一段代码吗? --------------------编程问答-------------------- 你做一个循环删除,不就行了吗 --------------------编程问答-------------------- HQL的话,至少是
delete from Staff(员工类) where dept.id=2
吧?

--------------------编程问答-------------------- 怎么没有代码呢 --------------------编程问答-------------------- 先有get/load方法加载部门的数据,然后删除 ,cascade="delete" 这样就可以了 
或者在数据库外键中设置,删除时更新,但要先放弃hibernate的维护 inverse = true --------------------编程问答-------------------- 有很多种方法吧,先load或者get获取部门信息在delete就好了,大不了在加个hql语句呗
,delete from Staff where (部门类).id属性=2, --------------------编程问答-------------------- 不过直接hqlwhere p.dept.id=2 就好了。 --------------------编程问答-------------------- ……
private Dept dept(设置关联关系)

……


delete from Staff(员工类) where dept.id=2
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,