多对多查询的条件设置和删除问题

select 父 from 父类 父 left join 父.某属性(为set) 子 where 子.属性=XXXXX

一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有.
要查询教拥有书"a"的学生的老师!HQL如何写呀?如何取值?
class teacher{
String id;
String name;
Set students;
}
class student{
String id;
String name;
Set teachers;
Set books;
}
class book{
String id;
String name;
Set students;
}


SELECT t FROM teacher t join t.students s join s.books b where b.name = 'a'



现有一下3张表:
user 用户表
{
userid 
 username
password
gender
address
.....
}
role 角色表
{
roleid
rolename
roledesc
}
user_role 用户角色表(many to many 的中间表)
{
userid
roleid
}
多对多的相关配置均OK,user表是主控方,cascade="save-update".
现在要求删除一个用户时,其在中间表user_role中的相关记录也被删除,而role角色表

中的记录不被删除。
大家有没有好的解决方法啊??


因为你的是多对多的关系,级联负责的是两个实体之间的 级联关系

而你要删除的关系表
关系是通过inverse来控制的,
比如 A和B多对多 关系表为A_B,
当你要在删除A的时候也要删除他们在A_B中对应的关系记录,
你就需要在B段 的 set b中 设置 inverse="true"

同理 你要在删除B的时候 删除它们之间的关系 就要在A的配置文件的 set节点中 配置

inverse="true";

如果你既要在删除A的时候删除它们之间的关系 也要在删除B的时候删除它们之间的关系

那么 什么都不需要配置 一切默认 就好了

(我说的是在 hibernate3.2上 是这样的 应该3.0之上都是这样的)

实践:hibernate2.1

<hibernate-mapping>

<class name="com.callcenter.project.feedback.business.FeedBack" table="TBL_INFOR_FEEDBACK">

<id name="feedBackId" type="string" column="FEEDBACK_ID">
<generator class="uuid.hex"/>
</id>
...


<set name="roles"
table="tbl_infor_feedback_role"
lazy="true"
>
<key column="feedback_id"></key>
<many-to-many class="com.callcenter.foundation.user.business.Role"
column="role_id"
></many-to-many>
</set>

</class>


session.delete(session.load(FeedBack.class, "8a88884f1ae7a79d011ae7a7aae10002"));


Hibernate: select feedback0_.FEEDBACK_ID as FEEDBAC18_0_ ... from TBL_INFOR_FEEDBACK feedback0_ where feedback0_.FEEDBACK_ID=?

Hibernate: delete from tbl_infor_feedback_role where feedback_id=?

Hibernate: delete from TBL_INFOR_FEEDBACK where FEEDBACK_ID=?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值