如何使用 Spring 在 Postgresql 中存储 java.util.ArrayList

2024-04-20

我正在尝试批量插入一组 Bean。 bean 的属性之一是 ArrayList。批量更新失败,异常:

 Can't infer the SQL type to use for an instance of java.util.ArrayList. Use setObject() with an explicit Types value to specify the type to use.

我不知道要使用哪种 Postgresql 数据类型才能兼容 ArrayList。有没有办法可以在不更改其属性的数据类型的情况下批量更新bean?


豆子:

    import java.util.List;

    public class SomeBean {
        private int id;
        private List<String> names;

        @Override
        public String toString() {
            return "SomeBean [id=" + id + ", names=" + names + "]";
        }
        //Setters and getters

表架构:

CREATE TABLE arraylistexample
(
  id serial NOT NULL,
  names character varying[]
)

插入数据的方法:

    public void insert(List<SomeBean> beans){
        String sql = "INSERT INTO ARRAYLISTEXAMPLE (NAMES) VALUES (:names)";

        SqlParameterSource[] data = SqlParameterSourceUtils.createBatch(beans.toArray());
        pgTemplate.batchUpdate(sql, data);
    }

例外情况:

Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO ARRAYLISTEXAMPLE (NAMES) VALUES (?, ?)]; nested exception is org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of java.util.ArrayList. Use setObject() with an explicit Types value to specify the type to use.
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:98)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:615)
    at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:884)
    at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.executeBatchUpdateWithNamedParameters(NamedParameterBatchUpdateUtils.java:40)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:303)
    at some.package.dao.GenericDao.insert(GenericDao.java:45)
    at some.package.runner.FileLogicTester.storingArrayListInDb(FileLogicTester.java:220)
    at some.package.runner.FileLogicTester.main(FileLogicTester.java:86)
Caused by: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of java.util.ArrayList. Use setObject() with an explicit Types value to specify the type to use.
    at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1801)
    at org.postgresql.jdbc3g.AbstractJdbc3gStatement.setObject(AbstractJdbc3gStatement.java:37)
    at org.postgresql.jdbc4.AbstractJdbc4Statement.setObject(AbstractJdbc4Statement.java:46)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:255)
    at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:351)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:216)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144)
    at org.springframework.jdbc.core.BatchUpdateUtils.setStatementParameters(BatchUpdateUtils.java:63)
    at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.access$000(NamedParameterBatchUpdateUtils.java:32)
    at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:47)
    at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:893)
    at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:884)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587)
    ... 7 more

有什么建议么?


我面临着同样的问题。Here http://www.postgresql.org/message-id/50344D58.9010401@ringerc.id.au人们对此进行了讨论。 看起来这是 JDBC 驱动程序或 PostgeSQL 本身的错误,所以你不能只将数组传递给数据库。作为一种解决方法,我必须手动创建 SQL(我有整数值,因此不关心 sql 注入;您可能需要动态准备SELECT * FROM MYTABLE WHERE ID IN (?,?,?)首先然后处理该语句)。

private static final String SQL_FIND_GOAL = "SELECT * FROM MYTABLE WHERE ID IN (:ids)";

public List<MyGoal> getAllMyGoals(Set<Integer> ids) {
// Work around of issue.
int i=0;
String mockInStatement = "";
for (int type: ids){
  if (i < ids.size()-1){
    mockInStatement = mockInStatement + type + ",";
  }
  else {
    mockInStatement = mockInStatement + type;
  }
  i++;
}
String refinedSQL = SQL_FIND_GOAL.replace(":ids",mockInStatement);

List<MyGoal> result = jdbcTemplate.query(
    refinedSQL, 
    new RowMapper<MyGoal>() {
      @Override
      public MyGoal mapRow(ResultSet rs, int rowNum) throws SQLException {
        MyGoal myGoal = new MyGoal();
        myGoal.setCode(rowNum);
        myGoal.setName(rs.getString("name"));
        return myGoal;
      }
    });
return result;  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Spring 在 Postgresql 中存储 java.util.ArrayList 的相关文章

  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 使用 Checkstyle Plugin 时从插件调用代码时出现问题:“org.eclipse.jface”

    我正在尝试在 Rational Software Architect 7 0 0 4 上使用 eclipse cs 插件 我最近卸载了旧的 beta2 版本并安装了 beta3 插件本身按照之前的配置工作 但是每当我尝试通过 Windows
  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • 使用 Spring 时实例化对象,用于测试与生产

    使用 Spring 时 应该使用 Spring 配置 xml 来实例化生产对象 并在测试时直接实例化对象 这样的理解是否正确 Eg MyMain java package org world hello import org springf
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • 使用 Guava 联合两个 ImmutableEnumSets

    我想联合两个ImmutableEnumSets来自番石榴 这是我的尝试 public final class OurColors public enum Colors RED GREEN BLUE YELLOW PINK BLACK pub
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 更新plpgsql中触发器函数中的多列

    给出以下架构 create table account type a id SERIAL UNIQUE PRIMARY KEY some column VARCHAR create table account type b id SERIA
  • OpenJDK 版本控制

    上下文 我想确保我们系统上安装的 Java 不受 CVE 2022 21449 的影响 java version 给出 openjdk version 11 0 7 2020 04 14 LTS OpenJDK Runtime Enviro
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali

随机推荐

  • Swift 4 编程三引号

    当他们说 它与结束引用的缩进匹配时 是什么意思 对于占用多行的字符串 请使用三个双引号 只要与结束引号的缩进相匹配 每个带引号的行开头的缩进就会被删除 例如 让引号 虽然左边有空格 实际的行没有缩进 除了这一行 双引号 可以出现而无需转义
  • 查找图像列表的中值

    如果我有一个由 3D ndarray 表示的图像列表 例如 x y color 我可以使用哪些操作来输出具有所有值中值的图像 我正在使用 for 循环 发现它太慢了 这是我使用的矢量化实现NumPy http www numpy org 在
  • 如何在带有流星的车把助手中使用多个参数?

    我正在尝试使用 Meteor 创建一个自定义助手 以下是此处的文档 https github com meteor meteor wiki Handlebars https github com meteor meteor wiki Han
  • UIButton 和外观 API - 支持与否?

    根据UIAppearance协议参考 http developer apple com library ios documentation UIKit Reference UIAppearance Protocol Reference Re
  • GCF 部署失败(区域/计费)

    我无法再部署功能 即使在其他项目上也是如此 我一如既往地部署gcloud functions deploy 现在我收到这个错误 Failed to initialize region action ID 5a9a2fb704b2df80 E
  • 在 Rails 5 应用程序记录类中包含一个模块

    我正在使用应用程序记录来简化整个应用程序的共享逻辑 下面是一个编写布尔值及其逆的范围的示例 这效果很好 class ApplicationRecord lt ActiveRecord Base self abstract class tru
  • 根据条件替换数据框中的行

    我有以下数据框 id f1 f2 1 a 1 3 2 b 3 5 3 c 4 7 我想用一行替换 f1 gt 3 的所有行 id x f1 0 f2 0 所以上面的内容会映射到 id f1 f2 1 a 1 3 2 b 3 5 3 x 0
  • C# 的 switch 语句区分大小写。有没有办法切换它,使其不区分大小写? [复制]

    这个问题在这里已经有答案了 C 的 switch 语句区分大小写 有没有办法切换它 使其不区分大小写 谢谢 但是 我不喜欢这些解决方案 因为 case 条件将是一个变量 并且我不知道它们是否都是 UPPER 或 lower 是的 使用ToL
  • 如何在交叉验证和GridSearchCV中实现SMOTE

    我对 Python 比较陌生 您能帮助我将 SMOTE 的实施改进为适当的管道吗 我想要的是在每次 k 次迭代的训练集上应用过采样和欠采样 以便模型在平衡的数据集上进行训练 并在不平衡的遗漏部分上进行评估 问题是 当我这样做时 我无法使用熟
  • 如何使 json 数据可用于我的 Vue 动态路由

    我有一个List我从中获取日期的组件db blogs json created fetch http localhost 3000 blogs then response gt return response json then data
  • 迭代索引属性(反射)

    我想迭代只能通过反射访问的索引属性 但是 我是在充分了解可能有一个令人尴尬的简单答案的情况下才这么说的 MSDN Google失败 除了在PropertyInfo GetValue prop counter 直到TargetInvocati
  • WhereNot linq 表达式

    我正在尝试创建一个扩展 WhereNot 所以我可以使用 Dim x Hello world Dim y x Split WhereNot AddressOf String IsNullOrEmpty 请注意 我的目标是学习 linq 表达
  • asp.net中displayfor和displaynamefor的简单解释是什么?

    我有课 public class Item public int ItemId get set Required ErrorMessage Category is required Range 1 int MaxValue ErrorMes
  • 当我的笔记本电脑使用电池时,是否可以让 Intellij 自动进入省电模式?

    我通常在插入交流电源的情况下工作 但有时我拔掉电源线并忘记将 Intellij 置于省电模式 我的电池很快就会耗尽电量 可以按照我的要求做吗 Please 遵循此功能请求 https youtrack jetbrains com issue
  • Docker:在其他容器中查找sendmail

    我正在学习如何将 Docker 与多个容器一起使用 而不是单个容器 我想学习如何从容器 A 调用位于容器 B 上的程序 即 我希望能够致电sendmail从我的web容器 同时sendmail和类似的程序位于mailhog容器 我有这个 d
  • dlclose() 不调用全局对象的析构函数

    插件1 cpp include
  • 无法在 SQL Server 2017 中创建 tSQLtCLR 程序集

    我最近安装了 SQL Server 2017 Express 和 localdb 正式版 在尝试安装 tSQLt 框架时 我发现了 SQL Server 2017 中实现的一项新安全功能 clr strict security 选项 这个新
  • C++ 并发性:互斥体外部的变量可见性[重复]

    这个问题已经存在了 我无法理解变量何时被强制写入内存 即使是在互斥块之外 我对下面的复杂代码表示歉意 因为我已经剥离了处理是否的逻辑reader决定某些数据是否陈旧 需要注意的重要一点是 99 9 的情况下 读者会采取fast path并且
  • 符合 Y2K 意味着什么?

    我正在阅读 Perl 编程语言基础知识 我遇到了以下语句 Perl is Y2K compliant 即使在谷歌搜索之后也不太明白它的意思 是否建立了某种标准 如果是的话 那么是谁做的呢 任何信息表示赞赏 对于 20 世纪 90 年代末从事
  • 如何使用 Spring 在 Postgresql 中存储 java.util.ArrayList

    我正在尝试批量插入一组 Bean bean 的属性之一是 ArrayList 批量更新失败 异常 Can t infer the SQL type to use for an instance of java util ArrayList