当前位置: 首页 > news >正文

Mybatis plus update PG json 类型 报错解决

Mybatis plus update PG json 类型 报错解决

  • 1. 定义的PG数据库对象
  • 2. 自定义 JSON Handler
  • 3. update Wrapper
  • 4. update 报错信息
    • 4.1 No hstore extension installed.
    • 4.2 Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property.
  • 5. 解决方案

1. 定义的PG数据库对象

@TableName("t_demo")
public class DemoPO {@TableField(value = "content", typeHandler = JSONTypeHandler.class)private JSONObject content;}

2. 自定义 JSON Handler

package com.xxx.handler;import com.alibaba.fastjson2.JSONObject;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.postgresql.util.PGobject;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;@MappedTypes(JSONObject.class)
public class JSONTypeHandler extends BaseTypeHandler<JSONObject> {private static final PGobject jsonObject = new PGobject();@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType) throws SQLException {jsonObject.setType("json");jsonObject.setValue(parameter.toString());ps.setObject(i, jsonObject);}@Overridepublic JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {String sqlJson = rs.getString(columnName);if (null != sqlJson) {return JSONObject.parseObject(sqlJson);}return null;}@Overridepublic JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String sqlJson = rs.getString(columnIndex);if (null != sqlJson) {return JSONObject.parseObject(sqlJson);}return null;}@Overridepublic JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {String sqlJson = cs.getString(columnIndex);if (null != sqlJson) {return JSONObject.parseObject(sqlJson);}return null;}
}

3. update Wrapper

public boolean update(String id, JSONObject content) {LambdaUpdateWrapper<DemoPO> lambdaUpdate = new LambdaUpdateWrapper<>();lambdaUpdate.eq(DemoPO::getId, id)lambdaUpdate.set(DemoPO::getContent, content);return update(lambdaUpdate);
}

4. update 报错信息

Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.postgresql.util.PSQLException: No hstore extension installed.at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:76)at com.baomidou.mybatisplus.core.MybatisParameterHandler.setParameters(MybatisParameterHandler.java:296)... 209 common frames omitted
Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.postgresql.util.PSQLException: No hstore extension installed.at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:76)at org.apache.ibatis.type.UnknownTypeHandler.setNonNullParameter(UnknownTypeHandler.java:71)at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:74)... 210 common frames omitted
Caused by: org.postgresql.util.PSQLException: No hstore extension installed.at org.postgresql.jdbc.PgPreparedStatement.setMap(PgPreparedStatement.java:559)at org.postgresql.jdbc.PgPreparedStatement.setObject(PgPreparedStatement.java:1063)at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setObject(HikariProxyPreparedStatement.java)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:568)at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:67)at jdk.proxy3/jdk.proxy3.$Proxy121.setObject(Unknown Source)at org.apache.ibatis.type.ObjectTypeHandler.setNonNullParameter(ObjectTypeHandler.java:31)at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:74)... 212 common frames omitted

4.1 No hstore extension installed.

hstore 是 PG 扩展的一种数据结构,但实际上我们 PG 数据库定义的为 json 类型,所以请忽略这个报错。

4.2 Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property.

关注一下这个报错,其实错误指向也不是很明确,但大体可以 GET 到类型转换出问题了。

so 我们在JSONTypeHandlersetNonNullParameter方法添加断点,发现insert都会走到这个方法,但是update却不会走到这边。

    public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType) throws SQLException {jsonObject.setType("json"); // 这一行添加断点,检查 update 是否经过这边jsonObject.setValue(parameter.toString());ps.setObject(i, jsonObject);}

5. 解决方案

update 的时候手动添加typeHandler

lambdaUpdate.set(DemoPO::getContent, content);
==>
lambdaUpdate.set(DemoPO::getContent, content, "typeHandler=com.xxx.handler.JSONTypeHandler");

相关文章:

Mybatis plus update PG json 类型 报错解决

Mybatis plus update PG json 类型 报错解决 1. 定义的PG数据库对象2. 自定义 JSON Handler3. update Wrapper4. update 报错信息4.1 No hstore extension installed.4.2 Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for …...

精通 Docker:简化开发、部署与安全保障

踏上 Docker 之旅&#xff0c;每一条命令都是高效与可靠的新境界。Docker 彻底改变了软件开发&#xff0c;为构建、部署和保障应用程序提供了前所未有的便利。从打造精益敏捷的镜像到编排复杂的微服务架构&#xff0c;Docker 让开发人员和运维人员都倍感轻松。让我们深入探索 D…...

KIMI的API使用:重点是他的API在使用的适合可以实时调用tool(外部联网等)

User: 如何获取kimi 的API Kimi: 要获取Kimi的API,您需要按照以下步骤操作: 注册账号:首先,您需要访问Kimi开放平台(platform.moonshot.cn/console)并注册一个账号。 获取API Key:登录后,在平台的“账户总览”部分查看平台赠送的免费额度。然后,点击“API Key 管理”…...

Android内核之Binder读写通信:binder_ioctl_write_read用法实例(七十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

【C语言/数据结构】经典链表OJ习题~第二期——链中寻环

&#x1f388;&#x1f388;&#x1f388;欢迎采访小残风的博客主页&#xff1a;残风也想永存-CSDN博客&#x1f388;&#x1f388;&#x1f388; &#x1f388;&#x1f388;&#x1f388;本人码云 链接&#xff1a;残风也想永存 (FSRMWK) - Gitee.com&#x1f388;&#x1f…...

MySQL日志机制【undo log、redo log、binlog 】

前言 SQL执行流程图文分析&#xff1a;从连接到执行的全貌_一条 sql 执行的全流程?-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞20次&#xff0c;收藏12次。本文探讨 MySQL 执行一条 SQL 查询语句的详细流程&#xff0c;从连接器开始&#xff0c;逐步介绍了查询缓存、解析 S…...

SSL通信、证书认证原理和失败原因

目录 SSL通信SSL认证原理SSL证书认证失败的原因分析 SSL通信 SSL通信指的是使用SSL&#xff08;Secure Sockets Layer&#xff09;协议进行的加密通讯。SSL是一种标准的安全技术&#xff0c;用于建立一个加密链接&#xff0c;确保从用户的浏览器到服务器之间的数据传输是私密和…...

【MsSQL】数据库基础 库的基本操作

目录 一&#xff0c;数据库基础 1&#xff0c;什么是数据库 2&#xff0c;主流的数据库 3&#xff0c;连接服务器 4&#xff0c;服务器&#xff0c;数据库&#xff0c;表关系 5&#xff0c;使用案例 二&#xff0c;库的操作 1&#xff0c;创建数据库 2&#xff0c;创建…...

AI编码工具-通义灵码功能实测

AI编码工具-通义灵码功能实测 通义灵码功能介绍行级/函数级实时续写自然语言生成代码单元测试生成异常排错智能排查生成代码注释生成代码解释研发领域自由问答 在上一篇文章中&#xff0c;我介绍了通义灵码的功能以及支持的操作系统&#xff0c;主流IDE等&#xff0c;详细内容可…...

直接显示二进制图片

Option Explicit Private Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(7) As Byte End Type Private Declare Function CreateStreamOnHGlobal Lib “ole32.dll” (ByRef hGlobal As Any, ByVal fDeleteOnResume As Long, ByRef ppstr As Any) As Long P…...

微软exchange邮箱发送

使用java发送exchange类型的邮件&#xff0c;foxmail中配置如下图&#xff1a; 需要的maven依赖如下&#xff1a; <dependency><groupId>com.microsoft.ews-java-api</groupId><artifactId>ews-java-api</artifactId><version>2.0</ve…...

AI绘画Stable Diffusion SDXL 超赞!高质量万能大模型,写实人像、时尚设计、建筑设计、电影制作—筑梦工业XLV4.0

大家好&#xff0c;我是阿威 今天为大家带来了一款多功能大模型——Dream Tech XL | 筑梦工业XL V4.0。该模型是大佬Dr_Dream基于V3.0训练而来的迭代版本&#xff0c;在提升画面质感的同时&#xff0c;对于提示词理解能力有跨越式提升&#xff0c;可以做到100%还原提示词。筑梦…...

数字人捕捉、建模与合成

在感知系统中&#xff0c;我们与外部合作者一起创建逼真的 3D 人类&#xff0c;其行为可以像虚拟世界中的真实人类一样。这项工作在今天有许多实际应用&#xff0c;并且对于元宇宙的未来至关重要。但是&#xff0c;在感知系统中&#xff0c;我们的目标是科学的——通过重现人类…...

Yarn:下一代JavaScript包管理器的安装与实战指南

当然&#xff0c;让我们深入探讨Yarn——一个高效、可靠的JavaScript包管理器&#xff0c;它为前端开发带来了新的速度和便利。Yarn由Facebook、Google、Exponent和Tilde公司共同推出&#xff0c;旨在解决npm&#xff08;Node.js包管理器&#xff09;存在的问题&#xff0c;如依…...

JVM进程缓存 Caffeine

JVM进程缓存 Caffeine 初识Caffeine Caffeine是一个基于Java8开发的&#xff0c;提供了近乎最佳命中率的高性能的本地缓存库。 ben-manes/caffeine: A high performance caching library for Java (github.com) 实例代码 Test void testBasicOps() {// 创建缓存对象Cache&…...

c++ 线程交叉场景试验

1.需求 处理一个列表的数据&#xff0c;要求按照列表的数据处理10个数据可以使用多线程处理&#xff0c;但是针对每个线程&#xff0c;1~10的处理顺序不能变。每个数据的处理必须原子&#xff0c;即只有一个线程可以针对某个数据进行处理&#xff0c;但是10个数据是可以由10个…...

Cell:如何升华你的单细胞数据——PCF空间单细胞蛋白组联合scRNA-seq解析骨髓微环境

骨髓微环境非常复杂&#xff0c;含有不同的细胞类型&#xff0c;包括了造血、间充质、内皮、血管平滑肌和神经谱系细胞等。非造血细胞对于骨髓造血非常关键。然而&#xff0c;这些细胞在人骨髓中的异质性和空间定位在很大程度上仍未被表征。来自佩雷尔曼医学院的研究者使用scRN…...

vue强制刷新组件

在Vue中强制刷新一个组件&#xff0c;通常不是一个推荐的做法&#xff0c;因为Vue的响应式系统设计就是为了自动处理依赖的更新。要强制重新渲染组件&#xff0c;以下是几种方法&#xff1a; 使用key属性&#xff1a; 最常见的方法是改变组件的key属性。当key发生变化时&#x…...

分享5款对工作学习有帮助的效率软件

​ 今天再来推荐5个超级好用的效率软件&#xff0c;无论是对你的学习还是办公都能有所帮助&#xff0c;每个都堪称神器中的神器&#xff0c;用完后觉得不好用你找我。 1.文件复制——ClipClip ​ ClipClip是一款功能强大、操作简便的文件复制与管理软件。它改变了传统的复制粘…...

redis秒杀(PHP版本)

前提提要 今天产品端提了个需求&#xff0c;院校组要求借调我去帮忙&#xff0c;因为我以前做过商城&#xff0c;现在他们需求做一个积分商城&#xff0c;需要做一个秒杀模块&#xff0c;结果毫无意外的我被借调过去了&#xff0c;刚好可以复习一下以前的知识&#xff0c;现在介…...

告别折腾:用 apt 和 Qt 官方安装器两种方式在 Debian 上搞定 Qt 5.15.2 开发环境

在 Debian 上搭建 Qt 5.15.2 开发环境的双轨方案 对于需要在 Debian 系统上建立 Qt 开发环境的工程师来说&#xff0c;选择正确的安装方式往往比安装本身更重要。本文将深入探讨两种主流方案&#xff1a;Debian 官方仓库的 apt 安装和 Qt 官方在线安装器&#xff0c;帮助您根据…...

量子同态加密:理论与实践的突破

1. 量子同态加密&#xff1a;理论与实践的桥梁量子同态加密&#xff08;Quantum Homomorphic Encryption, QHE&#xff09;是密码学领域的一项突破性技术&#xff0c;它允许在加密的量子数据上直接执行任意量子计算&#xff0c;而无需事先解密。这项技术对于构建真正隐私保护的…...

影刀RPA工程实战:多店铺环境隔离体系与自动化流程的事务性保障

一个店铺登录态串到另一个店铺&#xff0c;只在一瞬间。 但要真正杜绝它&#xff0c;需要的是一整套工程约束。 上一篇文章聊了浏览器实例池与并发调度&#xff0c;那套东西帮我们扛住了几十个店铺同时跑的稳定性。但很快我们又遇到了一个新问题&#xff1a;店铺之间的环境边界…...

巧用Charles代理,根治Xposed资源库HTTPS迁移引发的下载难题

1. 当Xposed遇上HTTPS&#xff1a;一场协议升级引发的"断粮危机" 去年给家里老人用的那台小米4刷机时&#xff0c;突然发现Xposed框架死活下载不了资源包。屏幕上赫然显示着那个熟悉的错误提示&#xff1a;"Xposed Installer:下载http://dl.xposed.info/repo/fu…...

HS2-HF_Patch:一键解决《Honey Select 2》三大核心问题的终极增强补丁

HS2-HF_Patch&#xff1a;一键解决《Honey Select 2》三大核心问题的终极增强补丁 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 厌倦了《Honey Select 2》原版…...

加密货币社区 Google 官方邮件钓鱼威胁机理与防御体系研究

摘要 2026 年 5 月&#xff0c;加密货币社区出现依托 Google 官方邮件通道实施的高级钓鱼攻击&#xff0c;比特币开发者 Jameson Lopp 公开预警&#xff0c;该攻击通过伪装系统安全提示、篡改发件人显示名、滥用可信邮件基础设施&#xff0c;使传统安全告警失效&#xff0c;对新…...

别再只盯着ADC了!74HC4067的另类玩法:DIY一个简易多路信号切换器与逻辑分析仪探头

74HC4067的创意实践&#xff1a;打造多功能信号切换与逻辑分析工具 在电子设计与调试过程中&#xff0c;多路信号切换和逻辑分析是两项基础但至关重要的任务。传统解决方案往往需要昂贵的专业设备&#xff0c;而本文将展示如何利用常见的74HC4067芯片&#xff0c;配合开源硬件和…...

基于SpringBoot的电影院选座购票系统毕业设计源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot框架的电影院选座购票系统以解决传统影院票务管理中存在的效率低下与用户体验不足等问题。当前电影院票务系统普遍采用单体架…...

Cadence Virtuoso新手避坑指南:手把手教你画反相器原理图(附3.3V工艺库设置)

Cadence Virtuoso新手避坑指南&#xff1a;3.3V工艺库反相器设计全流程解析 第一次打开Cadence Virtuoso时&#xff0c;那个充满专业术语的界面就像面对一架航天飞机的控制台——每个按钮都暗藏玄机&#xff0c;每次点击都可能引发未知错误。作为模拟IC设计的行业标准工具&…...

Spring Boot 面试题详解:Spring Boot 核心原理、自动配置、启动流程、IoC 容器、Web 请求链路、事务、Actuator 与 JVM 线上排障全攻略

1. Spring Boot 到底是什么&#xff1f;为什么 Java 后端几乎绕不开它&#xff1f;1.1 它不是新语言&#xff0c;也不是替代 Spring&#xff0c;而是 Spring 应用的工程化脚手架Spring Boot 的出现&#xff0c;本质上是为了解决传统 Spring 项目启动慢、配置多、依赖难配、上线…...