Java 如何在Hibernate查询和Session.get()中启用MySQL二进制运算符

Java 如何在Hibernate查询和Session.get()中启用MySQL二进制运算符,java,mysql,database,hibernate,orm,Java,Mysql,Database,Hibernate,Orm,是否可以使用HQL对MySQL通过这样的查询获取记录 select * from students where binary sid='s001' 我使用的是hibernate 4.3,hibernate无法识别这个二进制操作符。如果我想用Session.get()实现同样的功能,我必须做什么?MySQL和HQL都支持CAST()函数,因此您可以将查询重写为: select * from students where CAST(sid as binary) = CAST('s001'

是否可以使用HQL对MySQL通过这样的查询获取记录

 select * from students where binary sid='s001' 

我使用的是hibernate 4.3,hibernate无法识别这个二进制操作符。如果我想用Session.get()实现同样的功能,我必须做什么?

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

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

对于Session.get(),需要使用Hibernate自定义注释。您可以在此处找到更多信息。

仍然不清楚问题的确切原因,是否希望在Hibernate中运行MySQL查询我希望在编写任何hql时,在Hibernate中使用MySQL的二进制关键字的等效功能。而且Session.get()也执行相同的任务,但我不想在代码中手动执行。我无法在短时间内在@Loader上找到好的文档。但看几个例子,我假设在使用Session.get()时,它将触发一个自定义查询来通过id获取数据。并且,该自定义查询将通过注释中的“namedQuery”链接。是吗?是的,没错。我添加了一些链接来指导您使用@Loader注释。是的!这就是我一直在寻找的。感谢您的参考。如果我将HQL写为“…CAST(stud.sid为BINARY)=CAST('s001')”,它将引发空指针异常,因为BINARY未解析为类型。相反,“BINARY(stud.sid)=BINARY('s001')”效果很好。在这种情况下,CAST是否需要特别小心才能实现?您可以使用自定义Hibernate方言注册二进制函数,该方言扩展了mysqldial。通过这种方式,您可以像使用任何其他HQL函数一样使用二进制函数。