`
dingjun1
  • 浏览: 213744 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
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=?


分享到:
评论

相关推荐

    lucene创建修改删除组合条件查询

    在本主题中,我们将深入探讨如何使用Lucene进行创建、删除、修改和组合条件查询,以及如何实现类似MySQL中的LIKE、IN、OR和时间范围条件查询。 首先,**创建索引**是使用Lucene的第一步。创建索引涉及到读取数据源...

    access 多条件查询

    创建一个多条件查询的窗体,你可以为每个条件设置文本框,让用户输入值,然后将这些值动态地插入到查询的WHERE子句中。 例如,你可以在窗体上放置两个文本框,分别标记为“部门”和“最低工资”。当用户输入值并...

    c#多条件查询存储过程实例

    ### C#多条件查询存储过程实例 #### 一、引言 在开发应用程序时,数据库查询操作是非常常见的需求之一。为了提高查询效率和代码的可维护性,使用存储过程...希望本篇内容能对你理解和应用多条件查询存储过程有所帮助。

    jQuery多条件查询筛选插件.zip

    使用时,只需引入插件文件,设置相关配置,如筛选条件、事件触发方式等,即可快速实现多条件查询功能。 八、自定义扩展 如果你发现插件不能完全满足需求,可以对其进行自定义扩展。通过阅读插件源码,了解其内部...

    ASP的多条件动态查询

    在网页`index_people.htm`中,用户可以通过文本框和下拉菜单输入或选择查询条件,包括姓名、学历、职称和现在状况。当用户点击“搜索”按钮,表单数据会被POST到`people_seek.asp`页面处理。 在`people_seek.asp`中...

    struts CRUD+HIbernate 多对一查询+部分表删除功能

    在查询时,可以使用Criteria API的createCriteria()方法链式构建查询条件,或者使用HQL的JOIN语句来联合查询两个表。 部分表删除功能的实现可能涉及在Action类中编写逻辑,确定哪些记录应该被标记为已删除。这可能...

    T6-报表高级条件查询介绍-

    1. 动态条件:用户可以根据实际需求动态添加、修改或删除查询条件,提高灵活性。 2. 条件组:将多个条件组织成条件组,可以进一步提升条件的复杂性和灵活性。 3. 存储条件:保存常用的查询条件为模板,方便以后快速...

    SQL 语句 删除最老记录和条件删除记录的三方法

    ### 方法三:使用子查询和 JOIN 来删除最老记录 第三种方法是通过创建一个子查询,从中选择最老的记录,然后与原始表进行内连接,最后删除匹配的记录。这种方法虽然复杂,但在某些数据库系统中可能提供更好的性能。...

    EXCEL+ACCESS 输入+查询+修改+删除.rar

    - 排序与筛选:按一列或多列对数据进行升序或降序排序,或使用条件筛选显示满足特定条件的行。 - 公式与函数:使用VLOOKUP、HLOOKUP、INDEX/MATCH等函数进行复杂查询,或利用IF、AND、OR等逻辑函数进行条件查询。 ...

    sortable拖拽吸附条件查询模板-前端拖拽元素并吸附保存(可删除筛选条件)全部代码

    // 更新查询条件 } }); ``` 以上代码展示了如何使用`sortable`库、JavaScript和实时查询功能来构建一个前端拖拽吸附条件查询模板。请注意,这些代码片段需要根据实际项目进行适当的调整和优化。同时,别忘了处理...

    ZSE16N ZDATA任意表指定条件的查询、记录修改及删除.docx

    - `COND_TAB`:存储查询条件的表格。 - `DREF`、`DREF_DEL`、`DREF_KEY`:这些是数据引用,用于动态地处理和访问内存中的数据。 - `IT_FIELDCAT`、`IS_FIELDCAT`:与ALV(ABAP List Viewer)相关的字段分类信息,...

    jQuery淘宝商品列表多条件查询

    本项目“jQuery淘宝商品列表多条件查询”旨在实现一个与淘宝购物平台类似的商品筛选功能,帮助用户快速定位到他们感兴趣的商品。 在商品列表展示上,通常会涉及到以下几个关键知识点: 1. **数据获取与动态加载**...

    mybatis关联查询问题(一对多、多对一)

    在这个场景中,"mybatis关联查询问题(一对多、多对一)"是核心关注点,这涉及到数据库设计中的关系映射以及在Mybatis中如何处理这些关系。 1. **一对多关联**: 在数据库设计中,一对多关联是指一个表中的记录可以...

    简单的图书管理系统实现对图书的增加,删除,修改,查询,列表等

    本系统是一个基于Java编程语言实现的简单图书管理系统,主要功能包括图书的增加、删除、修改、查询和列表展示。下面将详细介绍这些功能的实现及相关的技术知识点。 1. **图书增加**:在系统中添加新图书时,通常...

    多条件查询

    6. **使用查询类型**:Access还提供了多种预定义的查询类型,如选择查询(满足特定条件的记录)、联合查询(合并多个表的结果)、操作查询(更新、删除或生成新表)和参数查询(用户输入值的动态查询)。选择适合你...

    数据库查询 添加 删除 排序

    在IT领域,数据库是存储和管理数据的核心工具,而查询、添加、删除和排序是数据库操作的基本要素。这里我们主要探讨如何使用数据库进行这些操作,以及如何通过编程语言(如PowerBuilder,简称PB)与数据库结合实现...

    数据库的增加修改查询删除

    在Java编程中,与数据库进行交互是一项基本技能,这通常涉及到对数据库中的表格进行增加、修改、查询和删除操作,也就是我们常说的CRUD(Create, Read, Update, Delete)操作。本篇文章将详细探讨这些知识点。 首先...

    coredata多表查询demo

    4. **FetchedProperties**:这是CoreData提供的一种特殊的属性类型,可以用来表示一对多或者多对多关系的反向引用,方便进行关联查询。 5. ** MagicalRecord** 和 **CoreData+Operators**:这些是第三方库,为...

    MyBatis高级映射(多对多查询)

    7. **动态SQL**:MyBatis支持动态SQL,使得在处理复杂的查询条件时更加灵活。你可以根据需要动态生成WHERE子句,以实现更精确的查询。 总之,MyBatis的高级映射功能为处理多对多查询提供了强大的工具。通过合理配置...

    ASP登录注册(查询、删除、搜索、增加)系统

    ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于...总的来说,"ASP登录注册(查询、删除、搜索、增加)系统"是一个基础但全面的Web应用实例,对于学习ASP和Web开发来说,是一个很好的实践项目。

Global site tag (gtag.js) - Google Analytics