解决Hibernate 3不支持 "&" 运算的SQL语句

控制台打印Hibernate的SQL语句显示绑定参数值 问题? 使用Hibernate提供的show_sql内置属性true只能输出类似于下面的SQL语句: Hibernate:    insert into user(name,password) values (?, ?)  这样不利于程序的调试,怎么可以显示具体参数的值? 解决方法: 一、使用第三方jar包p6spy: 下面介绍一下p6spy的使用步骤: 1 h 阅读详情

按位与运算(&)在许多数据库中都是支持的,遗憾的是,Hibernate 3在HQL中不支持&运算,如果你写了如下的HQL:

where a.id & :mask = :target

则Hibernate报错:exception: unexpected char: '&'.

如何解决此问题?方法是利用Hibernate支持的自定义SQLFunction,定义一个bitand(a,b)的SQLFunction,然后,自己写一个解释器,生成a & b的SQL语句。

要实现一个自定义的SQLFunction,必须实现SQLFunction接口:

package com.js.dialect;

import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.QueryException;
import org.hibernate.dialect.function.SQLFunction;
import org.hibernate.engine.Mapping;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.type.Type;

/**
 * <p>
 * Title:BitAndFunction
 * </p>
 * <p>
 * Description:
 * </p>
 *
 * @author js
 * @version
 * @since
 */

public class BitAndFunction implements SQLFunction {
 public Type getReturnType(Type type, Mapping mapping) {
  return Hibernate.INTEGER;
 }

 public boolean hasArguments() {
  return true;
 }

 public boolean hasParenthesesIfNoArguments() {
  return true;
 }

 public String render(List args, SessionFactoryImplementor factory)
   throws QueryException {
  if (args.size() != 2) {
   throw new IllegalArgumentException(
     "BitAndFunction requires 2 arguments!");
  }
  return args.get(0).toString() + " & " + args.get(1).toString();
 }

}

然后,根据使用的数据库方言,派生一个自定义的CustomSQLDialect:

 package com.js.dialect;

import org.hibernate.dialect.MySQLInnoDBDialect;

/**
 * <p>
 * Title:CustomSQLDialect
 * </p>
 * <p>
 * Description:
 * </p>
 *
 * @author js
 * @version
 * @since
 */
public class CustomSQLDialect extends MySQLInnoDBDialect {
 /**
  *
  */
 public CustomSQLDialect() {
  super();
  registerFunction("bitand", new BitAndFunction());
 }

}

设定函数名为bitand,参数和返回值均为Hibernate.LONG,现在,用CustomSQLDialect替换配置文件中的设置,然后修改HQL:

where bitand(a.id, :mask) = :target

编译,运行,观察Hibernate的SQL输出,执行不成功!不认识"bitand"!

MT5策略如何设置回测结果才能最接近实盘 摘要:在MT5回测中,选择&quot;每笔分笔报价&quot;模式最接近实盘交易,因其使用真实Tick数据模拟价格波动、点差和滑点。关键设置包括:下载高质量历史数据、合理设定点差和滑点、使用正常回测速度。该模式能准确测试挂单、止盈止损等策略,虽然速度较慢但结果最可靠,避免其他模式造成的失真,是评估交易策略表现的最佳选择。(149字) 阅读详情

相关推荐

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v...

weixin_35343788的博客 1351

关于执行SQL语句时出现的未知错误

当我创建表时,出现如下错误: ERROR 1064 (42000):You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Function VARCHAR(20),Address VARCHAR(30))DEFAULT CHARSET=utf8' at line 4 ERROR 106.

Mr_John 2005

基于wxWidgets框架,使用DialogBlocks建立OpenGL界面

前言 之前公司要求使用wxWidgets做GUI,基于OpenGL图形内核,开发三维可视化工具。目前初步开发工作基本已经完成,剩下都是完善了。这里记录一下最开始的框架搭建过程(当然是简化版啦)。wxWidgets结合OpenGL开发可以实现跨平台应用,再结合CMake和VS Code,整体开发工具用习惯了会感觉非常顺手。 界面编辑 首先,使用DialogBlocks新建一个工程,这里工程目录...

cyberobot的博客 2751

Sql数据库操作报错:char数据类型…

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <div id="content" class= "content mod-cs-content text-content clearfix"> 原因:不同的“

liupeng_qwert的专栏 1336

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3183

UWB灵犀遥控器方案介绍

UWB灵犀指向遥控器的技术原理和方案介绍

xiongdauwb的博客 3900

一则> ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 错误解决思路

原SQL中语句很长不贴了,只贴出有问题的部分 SQL Server中这样写没问题 case IsNull(State, 0) when 0 then '启用' else '禁用' end as sState 转Oracle改成这样 case nvl(State, 0) when 0 then '启用' else '禁用' end as sState --改成这样报00932错误 经...

wh445306 1万+

离线AI实战指南:本地部署大模型处理PDF/Word/Excel

离线AI是指在无网络、不上传数据前提下,于个人设备运行大语言模型并完成文档理解、多轮对话与代码辅助等任务的技术方案。其核心依赖本地模型推理、文档解析向量化和轻量级对话调度三大能力。随着Phi-3、Qwen2、Llama3等轻量化开源模型普及,以及Ollama、LM Studio等易用工具成熟,普通用户已可在主流笔记本上实现PDF摘要、合同比对、代码注释等真实办公场景。本文聚焦离线AI的硬件适配、模型选型、文件处理链路与知识库构建,尤其强调中文OCR支持、结构化文档提取与CPU/GPU混合推理优化,助力非开发

weixin_31968639的博客 497

让hql支持按位与运算

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

weixin_34381666的博客 293

Microsoft AI SDK 与 SAP ABAP:让企业级 AI 能力触手可及的深度整合指南

借助 Microsoft AI SDK,ABAP 开发者无需跳出熟悉的事务码与数据字典,就能把 GPT‑4 的强大语言理解与生成能力深度植入采购、销售、财务等核心业务流程。只要掌握“初始化 SDK → 构造 Prompt → 解析输出”这一范式,未来无论 Azure OpenAI、OpenAI 还是本地化 LLM,都能在同一套代码骨架内快速切换,实现真正的“AI 即服务”。现在,就让我们在下一行 ABAP 里拥抱智能未来。参考链接均于 2025‑07‑22 提取,推荐读者结合实际版本进一步验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 435

【遥感物候】植被物候与气候(气温和降水)条件的空间相关性分析

植被生长与气候的关系最为密切,通过计算植被各个生长季参数和气温、降水之间的相关系数可以分析生长季参数的变化与气温、降水之间的关系的程度。本文计算30年的植被物候参数和气候数据之间的相关性,最终效果如下: 一、相关性分析原理 植被生长季及其变化是其生长环境中多个影响因子综合作用的耦合过程,其中气候是最重要、最活跃的环境因子。通过计算各个生长季参数和气温、降水之间的相关系数...

智慧空间实验室 8260

【转】解决Hibernate 3不支持 "&" 运算的SQL语句

转:[url]http://blog.csdn.net/explorering/article/details/1196397[/url] 按位与运算(&amp;)在许多数据库中都是支持的,遗憾的是,Hibernate 3在HQL中不支持&amp;运算,如果你写了如下的HQL: where a.id &amp; :mask = :target 则Hibernate报错:exception: unexpe...

勤奋的asialee的博客 166

9篇5章2节:NHIS 数据库的常规数据下载

文章概述了 NHIS-Teen、NHPI NHIS 等补充性调查以及 2024 年 NHIS 数据资源的具体内容,包括问卷材料、技术文档和数据模块,为研究者高效、规范地使用 NHIS 数据提供参考框架。

MD Code 1440

java---j2ee---hibernate执行原生Sql语句的方法

本人水平浅劣,不足之处,批评就是了....======================================modify time:2008-5-5很久没关注,今天发现旧文发布的方法是调用jdbc时的,不属于hibernate,现已更改如下:hibernate3的HQL 是面向对象的语法,已经支持 update ,delete from语句,但目前还不支持insert

安优小青和他的程序生活 5923

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Hibernate(十二)

Hibernate 113. 为什么要使用 hibernate? 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性...

Jack方 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java原生sql_java---j2ee---hibernate执行原生Sql语句的方法

本人水平浅劣,不足之处,批评就是了....======================================modify time:2008-5-5很久没关注,今天发现旧文发布的方法是调用jdbc时的,不属于hibernate,现已更改如下:hibernate3的HQL 是面向对象的语法,已经支持 update ,delete from语句,但目前还不支持insert into语句.做项...

weixin_31635881的博客 431

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用Hibernate3新增数据库

Hibernate3操作数据库有三种方式:1、使用Hibernate3的操作数据库,2、使用SQL操作数据库,3、使用HQL操作数据库。其中HQL暂时不支持新增数据,以下演示使用Hibernate3和sql新增数据 1、使用Hibernate新增数据 public void insertHibernate() { // 1、获取Session,org.hibernate.Sess...

博客 355

hibernate中SQL包含冒号

当前负责的项目使用的是hibernate,而“:”是hibernate的一个占位符,作为预编译使用的, select tmp.pid from (select pid, loginTime, @i := @i + 1 i from gms_record_login_game, (select @i := 0) r order by pid, loginTime) tmp LEFT J...

weixin_30595035的博客 669

mysql 包括冒号_hibernate中SQL包含冒号

当前负责的项目使用的是hibernate,而“:”是hibernate的一个占位符,作为预编译使用的,select tmp.pid from(select pid, loginTime, @i := @i + 1 i from gms_record_login_game, (select @i := 0) r order by pid, loginTime) tmpLEFT JOIN(select...

weixin_34377666的博客 505

Hibernate从2升级到3不支持Oracle8外连接(+)的解决办法

最近接手了一个要维护的项目,是用Hibernate2+Oralce8写成的,因为看到Hibernate3页出来这么久了,而且也感觉Hibernate3有它的许多新的特性,如批量删除和更新,新的HQL语法解析器AST。升级过程大致按照孙卫琴的那篇文章 如何把Hibernate2.1升级到Hibernate3.0?来做,该替换的替换完,该设置的设置完,程序一跑,当程序执行到向下面这种查询的时候(O

一叶不知秋 3335

hibernate 操作mysql 语句_hibernate操作数据库总结(转)

一、query方式1、hibernate使用原生态的sql语句执行数据库查询有些时候有些开发人员总觉得用hql语句不踏实,程序出现了错误,就猜测因为不是原生态的sql语句,数据库不支持,因此情愿选择回到jdbc时 代。这样既耗时耗力,又破坏面向对象的编程。其实,hibernate已经考虑到这个问题,hibernate可以执行原生态的sql语句,正对每种数据 库,你可以写对应的sql语句,然后用cr...

weixin_29164843的博客 388

Hibernate 实现分页查询

 Hibernate 可以实现分页查询,例如:从第2万条开始取出100条记录      代码:      Query q = session.createQuery("from Cat as c");      q.setFirstResult(20000);      q.setMaxResults(100);      List l = q.list();那么Hibernate底层如何

hbrqlpf的专栏 860

hibernate原生sql注意点

需要什么就查什么 这是写hibernate原生sql的原因 写原生sql(mysql中)需要注意的问题 1.时间字段 update_timedatetime DEFAULT NULL 实体类中: private String serviceTime; 获取的时候,先转Date,再转String customerAlarm.setTime(DateUtil.getStringDat...

Nyima_langka的博客 556
上一篇: 秋天不回来
下一篇: apply方法
Explorering
博客等级 码龄22年 8粉丝 25原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值