使用Anorm 2.4中的自定义ToStatement将NULL插入可为空的列中

时间:2015-12-17 23:26:30

标签: scala playframework anorm

在我们的项目中,我们有一个自定义映射到我们的一个类(Muid),如下所示:

implicit val muidToStatement: ToStatement[Muid] = new ToStatement[Muid] {
        def set(s: PreparedStatement, index: Int, muid: Muid): Unit = s.setObject(index, muid.uuid)
    }

ParameterMetaData实现:

implicit object MuidClassMetaData extends ParameterMetaData[Muid] {
        val sqlType = ParameterMetaData.StringParameterMetaData.sqlType
        val jdbcType = ParameterMetaData.StringParameterMetaData.jdbcType
    }

我们需要将null设置为可选列,例如:

SQL(sql).on(
    'id -> id,
    'created_by_id -> createdById,
    'organization_id -> organizationId,
    'parent_folder_id -> optionalParentFolderId, // <= Optional and nullable column
    'name -> name
)

这曾经用于Anorm 2.3,我现在得到的是:

org.postgresql.util.PSQLException: ERROR: column "parent_folder_id" is of type uuid but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.

我怀疑必须修复映射,但是,我没有找到很多关于可选值的自定义映射的文档。

此外,它似乎与可选java.util.UUID映射有关,因为我在Muid的每种情况下都得到相同类型的错误(这是UUID的简单包装器) )

解决这个问题的正确方法是什么?

我可以在不修改所有查询的情况下解决问题的唯一方法是将?stringtype=unspecified添加到JDBC连接URL。但是,这感觉不对。

谢谢,

P.S。我对Play&amp; amp;对不起,Anorm。

0 个答案:

没有答案