码迷,mamicode.com
首页 > Web开发 > 详细

hibernate使用@where实现条件过滤功能

时间:2014-10-31 20:44:58      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:hibernate   注解   

编程中最常用的功能,增删改查,而实际业务中真正物理删除数据的情况是很少的,基本都有使用逻辑删除,通常采用一个标志位,比如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 = "deleted='y'")
 List<Topic> topics;

有兴趣的同学可以去Google中搜索,百度中好像没有的.

hibernate使用@where实现条件过滤功能

标签:hibernate   注解   

原文地址:http://blog.csdn.net/salerzhang/article/details/40659679

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!