如何在Hibernate查询中使用COLLATE

3

我试图在Hibernate SQL查询中使用COLLATE语句,但是它无法识别该语句。

CONSULTA: FROM Articulos WHERE activo=0 
              and (codigodearticulo like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI'
              or descripcion like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI'  
              or descripcionadicional like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI' )
              and codigodelinea in
              (select CODIGODELINEA from Lineas where CATAUTOPARTES='1')

当应用程序编译时,Hibernate返回以下异常:
- line 1:107: unexpected token: COLLATE
- line 1:107: unexpected token: COLLATE
- line 1:107: unexpected token: COLLATE
- Error hibernate: unexpected token: COLLATE near line 1, column 107

我找不到问题,在MSSQL Server中它运行良好。

2个回答

3

不幸的是,HQL并不能完全替代SQL,并且似乎根本不允许指定排序规则。

可以在Criteria查询中指定排序规则。请参见此答案


1

不要使用HQL:

String hql = "SELECT e" +
    " FROM EntityJPA e" +
    " WHERE e.mycolumn COLLATE 'utf8_bin' = 'VALUE'"

Query query = entityManager.createQuery(hql);

你可以像这样使用本地查询

String sql = "SELECT t" +
    " FROM entity_table t" +
    " WHERE t.mycolumn COLLATE 'utf8_bin' = 'VALUE'" 

并将其作为本地查询执行:

Query query = entityManager.createNativeQuery(sql);

考虑到本地查询会在目标数据库(我们的情况下是mySQL)上创建SQL语言依赖关系,因此这是更简单的解决方案。

对于我们来说,这仍然可以接受,因为使用不同的DB引擎的可能性非常低。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接