Criteria查询之sqlRestriction()的理解
2024-08-22 10:03:16
sqlRestriction()的理解
在Criteria查询中
使用sqlRestriction()方法来提供SQL语法作限定查询,作为where字句
查看官方给的例子,如下
List cats = sess.createCriteria(Cat.class) .add( Restrictions.sqlRestriction("lower({alias}.name) like lower(?)", "Fritz%", Hibernate.STRING) ).list();
直接拿着官方的代码试了下,报错,点进去看了看源代码,如下
/** * Create a restriction expressed in SQL with one JDBC parameter. Any occurrences of <tt>{alias}</tt> will be * replaced by the table alias. * * @param sql The SQL restriction * @param value The parameter value * @param type The parameter type * * @return The Criterion * * @see SQLCriterion */ public static Criterion sqlRestriction(String sql, Object value, Type type) { return new SQLCriterion( sql, value, type ); }
第一个是参数String类型,是SQL语句的条件部分,第二个参数是参数值,第三个参数是类型
根据案例和源代码,可以推断出{alias}.name中{alias}是表的别名,我用的是user表,于是根据理解,这样写了下,如下
Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.sqlRestriction(“lower({User}.name ) LIKE lower(?)", "cater%", Hibernate.STRING));
结果还是报错,把Hibernate设置成自动打印出sql语句后,sql如下
Hibernate: select this_.id as id0_0_, this_.age as age0_0_, this_.birth as birth0_0_, this_.name as name0_0_ from user this_ where lower(this_).name like lower(?)
可以看到lower也被打印了出来,而且Hibernate会自动给别起别名,所以下面的形式,别名也对应不上
{User}.name LIKE ?
于是抱着试一试的态度,改成了这样:
Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.sqlRestriction(“{alias}.name LIKE lower(?)", "cater%", Hibernate.STRING));
这次对了,打印的sql为
Hibernate: select this_.id as id0_0_, this_.age as age0_0_, this_.birth as birth0_0_, this_.name as name0_0_ from user this_ where this_.name like ?
看来那里还必须写成{alias},那alias究竟是什么意思呢?是别名的意思,我的理解是,hibernate把{alias}当成了通配符
最新文章
- [Leetcode] Maximum Gap
- solr 4.6配置正解
- EasyUI实战经验总结,给有需要的人
- 进程间通信的WM_COPYDATA的使用
- Codeforces Round #355 (Div. 2)
- 我的新顶级域名vell001.ml
- BZOJ 3575 道路堵塞
- <;.net>;委托初探
- js获取中英文长度
- C++的精髓——虚函数
- JavaScript连等赋值
- 自主学习之RxSwift(二) -----flatMap
- Docker常见仓库Node.js
- windows下安装mysql-5.7.11-winx64
- rocketMQ安装中遇到的坑
- MySQL完整教程(共8章)
- SQL:Oracle 目录
- Linux Kernel sys_call_table、Kernel Symbols Export Table Generation Principle、Difference Between System Calls Entrance In 32bit、64bit Linux【转】
- HAproxy 代理技术原理探究
- border使用小技巧
热门文章
- 使用HTTP方式远程连接PowerShell
- 证明你是你——快速开启Windows Azure多重身份验证
- POJ3463Sightseeing[次短路计数]
- Unity热门插件推荐
- Linux字符设备驱动解析
- 渗透攻防工具篇-后渗透阶段的Meterpreter
- swift约束框架SnapKit使用
- Centos6 修改max user processes limits
- Delphi连接Oracle控件ODAC的安装及使用(轉載)
- Validation failed for one or more entities. See &#39;EntityValidationErrors&#39; property for more details.