使用 Jooq 从 scala 插入数组字段

问题描述 投票:0回答:1

我正在使用 Postgres 和 Jooq


object JooqBuilder {
  private val defaultSettings = new Settings()
    .withRenderFormatted(true)
    .withRenderNameStyle(RenderNameStyle.AS_IS)
    .withParseDialect(SQLDialect.POSTGRES)


  def default(conn: Connection) =
    DSL.using(conn, SQLDialect.POSTGRES, defaultSettings)
}

这是我的插页

        val insert = JooqBuilder
          .default(conn)
          .insertInto(
            table(MY_TABLE),
            field("id", classOf[String]),
            field("dimensions", classOf[Array[String]]),            
            field("dimensionCodes", classOf[Array[Long]])
          )

        items.foreach { i =>
          insert.values(
            i.id,            
            i.dimensions.toArray,     // scala List[String] to java array     
            i.dimensionCodes.toArray  // scala List[Long] to java array        
          )
        }
        insert.execute()

它在运行时失败了

Cause: java.lang.ClassCastException: class [J cannot be cast to class [Ljava.lang.Object; ([J is in module java.base of loader 'bootstrap')
  at org.jooq.tools.Convert$ConvertAll.from(Convert.java:520)
  at org.jooq.tools.Convert.convert0(Convert.java:324)
  at org.jooq.tools.Convert.convert(Convert.java:316)
  at org.jooq.tools.Convert.convert(Convert.java:387)
  at org.jooq.impl.DefaultDataType.convert(DefaultDataType.java:825)
  at org.jooq.impl.InsertImpl.addValue(InsertImpl.java:334)
  at org.jooq.impl.InsertImpl.values(InsertImpl.java:314)
  at org.jooq.impl.InsertImpl.values(InsertImpl.java:273)
  at org.jooq.impl.InsertImpl.values(InsertImpl.java:124)

我怀疑

i.dimensionCodes.toArray
返回基元数组 我检查过调试器

else if (fromClass.isArray()) {
    Object[] fromArray = (Object[]) from;

    // [#3062] [#5796] Default collections if no specific collection type was requested

from
很长[]

有什么解决办法吗?

postgresql scala jooq
1个回答
0
投票
t.dimensionCodes.toArray.map(l => java.lang.Long.valueOf(l))

明确的拳击有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.