hibernate下的子查询
程序员文章站
2022-07-11 20:15:28
...
昨天在用hibernate做项目的时候,发现一个bug。就是发现在用Restrictions.in()函数的时候,当in里面的表达式超过1000的时候就会报错。因为在oracle数据库里面,默认括号里面的表达式是不能超过1000.如果是用纯sql语句的话问题可能还是比较好解决的,因为我可以拼接sql。但是我在想hibernate作为一个这么成熟的持久层框架不可能没有考虑到这个问题的啊。后面经过查找资料和老板的帮助,终于找到了解决的方法。那就是在hibernate里面。查询都是先建立一个DetachedCriteria或者一个Criteria,前者是离线的,后者是在线的。我选择的是前者的离线的方式。我的查询是基于一个客户表和一个资源表的。在资源表里面有一个外键customer_id是客户表的主键。我开始的想法是先根据customer_name查询出来一个customer的list对象,然后用Restrictions.in()去查询,开始没有什么问题,但是当我模糊查询的时候等到的list的size大于1000的时候就开始出现错误了。后面查找才知道在oracle里面in厘米的表达式不能超过1000.后面我就开始想办法解决,但是网上的基本都是一些sql拼接的方式,我想要的是一种hibernate里面的方式。后面在老板的提醒下想到了hibernate下面的子查询的方式。所以我就直接用了criteria.add(Restrictions.like("customer.cnName", customerName));。但是后来发现还是不可以。总是报错说Customer类没有customer.cnName这个属性。后面通过查找资料才知道要想进行此类的子查询就要在创建一个DetachedCriteria。就是在原来的DetachedCriteria的基础上创建一个。criteria.createCriteria( "customer" ).add( Restrictions.like( "cnName" , customerName , MatchMode.ANYWHERE ) );如上所示。这种方式可以无限循环下去。那么就代表可以进行多层外键的子查询。
推荐阅读
-
js获取元素下的第一级子元素的方法(推荐)
-
python 之 数据库(多表查询之连接查询、子查询、pymysql模块的使用)
-
Hibernate通过SQL查询常量时只返回第一个字符问题的解决方法
-
asp下多个域名后缀同时查询的域名查询系统
-
asp.net下创建、查询、修改带名称空间的 XML 文件的例子
-
Mysql的子查询相关知识,少但是精
-
oracle数据库查询没问题,正常显示两个汉字;但是java后台Hibernate查询的时候只显示第一个汉字怎么解决?
-
mysql的一个坑。修改或者删除的时候不能直接调用子查询的结果集
-
如何实现在分组的情况下,以另一个时间字段查询出结果?
-
Linux系统下基本的帮助查询命令小结