hibernate使用@where实现条件过滤功能
来源:互联网 发布:东村明子 知乎 编辑:程序博客网 时间:2024/05/01 02:33
编程中最常用的功能,增删改查,而实际业务中真正物理删除数据的情况是很少的,基本都有使用逻辑删除,通常采用一个标志位,比如flag,查询的时候,flag=1的数据查出,flag=0的数据过滤掉.
使用hibernate的时候,通常不再直接才做sql语句,而是操作实体和HQL相结合的方式,只要维护好实体之间的关系,增删改查都可以使用极其简单的方式来完成,哪怕关联了好多张表好多个实体.
逻辑删除的时候就是更新一张表,那也只需要维护实体的一个标志位就可以了,不需要写HQL语句,如果要把主表和从表里的标志位都改变了,还是需要维护实体之间的关系,每个实体的标志位都设为0就行了.
但是问题出来了,查询的时候如何才能把标志位的条件加上,而我并不想写HQL语句,不想写类似于"from Entity1 inner jion Entity2 on Etity1.id = Entity2.eId and Etity1.flag = 1 and Etity2.flag = 1" ,如果是少量的实体关联,比如两三个还凑合,但是如果有十几个实体管理,写起来岂不是要繁琐无比啊,而且一不小心就容易出错.
仔细看一下控制台打印的数据,hibernate的查询其实也是把HQL转换成SQL来执行的(当然要这样做),这就给了我们启发,hibernate是不是有一个注解专门用来添加where条件的呢?也就是每次从HQL转换虫Sql都要给这个表添加这么条件.如果我是hibernate的设计者,我肯定要这么做的,因为实现起来不难,而方面性不言而喻.
问了好几个人都不知道这么个东西,网上找了半天,不知道该使用什么关键字来搜索,但一直坚信hibernate肯定没那么菜,一定这么个解决方案.最后才确定@Where这么个注解
其里面只有一个参数clause,完整用法是:
@Where(clause = "VALID_FLAG=1")
可以加在实体类上,也可以加在字段的get方法上,也支持这样的这样的办法
@Where(clause = "VALID_FLAG=1")
List<Topic> topics;
这个条件的意思是进行关联查询的时候,我只把Topic中VALID_FLAG = 1的查询出来.
在表上加一个意味着查询自己的时候只查询VALID_FLAG = 1等于1的
- hibernate使用@where实现条件过滤功能
- 数据where条件过滤
- [手工转载]Entity Framewor 实现 (include + where)条件过滤
- 使用ADF-BC 实现查询功能之四:通过代码动态设置Where条件参数
- Oracle select ---------having条件过滤与where条件过滤
- oracle-having条件过滤与where条件过滤
- Oracle select ---------having条件过滤与where条件过滤
- 关于C#中关于List.where中过滤条件的使用注意事项
- 关于C#中关于List.where中过滤条件的使用注意事项--笔记
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- Medoo Where的使用:条件
- 使用hibernate的@SQLDelete和@Where注解实现逻辑删除
- thinkphp where条件预处理过滤的占位符含义
- sql语句中过滤条件where和having的区别
- ThinkPHP where查询条件预处理过滤的占位符含义
- JOIN ON后面的过滤条件和where后面的过滤条件有什么不同?
- 实现图片过滤功能
- 使用where子句过滤表中数据
- (原)双核四线程
- (原)super.paintComponent解析
- sed行编辑器使用介绍
- (原)GridBagLayout
- (转)去掉QTreeWidget中节点之间的虚线
- hibernate使用@where实现条件过滤功能
- (转)C++延时效果
- (原)关于指针的一些个人想法
- 寻找字符串A中完全包含字符串B的最短子字符串
- (转)关于C++引用
- (转)ubuntu安装MySql
- (转)ubuntu安装JDK
- (转)ubuntu12.04 root用户下没有声音解决
- (转)关于java中的一些IO以及对象的可序列化