【问题标题】:How to enable the MySQL BINARY operator in Hibernate queries and Session.get()如何在 Hibernate 查询和 Session.get() 中启用 MySQL BINARY 运算符
【发布时间】:2015-09-24 10:26:48
【问题描述】:

是否可以使用 HQL 对 MySQL 进行这样的查询来获取记录?

 select * from students where binary sid='s001' 

我使用的是 hibernate 4.3,这个 BINARY 运算符不被 Hibernate 识别。如果我想用Session.get() 达到同样的效果,我该怎么办?

【问题讨论】:

  • 仍然不清楚到底是什么问题,你想在休眠状态下运行 MySQL 查询
  • 在编写任何 hql 时,我想要在 Hibernate 中与 MySQL 中的 BINARY 关键字等效的功能。还有 Session.get() 的相同任务,但不想在我的代码中手动完成。

标签: java mysql database hibernate orm


【解决方案1】:

MySQL 和 HQL 都支持 CAST() 函数,因此您可以将查询重写为:

select * 
from students 
where CAST(sid as binary) = CAST('s001' as binary) 

对于 Session.get() 你需要使用@Loader Hibernate 自定义注解。你可以在这里找到更多关于@Loader usage的信息。

【讨论】:

  • 短时间内我在@Loader 上找不到好的文档。但是看几个例子,我假设它会触发一个自定义查询来获取 id 上的数据,当 Session.get() 将被使用时。并且,该自定义查询将通过注释中的“namedQuery”链接。对吗?
  • 是的,没错。我添加了一些链接来指导您使用 @Loader 注释。
  • 是的!这就是我一直在寻找的。感谢您的参考。
  • 如果我将 HQL 写为“...CAST(stud.sid AS BINARY) = CAST('s001')”,它会抛出空指针异常,因为 BINARY 没有被解析为一种类型。相反,“BINARY(stud.sid)= BINARY('s001')”效果很好。在这种情况下实施 CAST 是否需要特别注意?
  • 您可以在扩展 MySQLDialect 的自定义 Hibernate Dialect 中注册 BINARY 函数。这样您就可以像使用任何其他 HQL 函数一样使用 BINARY 函数。
猜你喜欢
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2018-11-05
相关资源
最近更新 更多