JDBC BatchUpdate错误在Kotlin中提供SqlParameterSource

时间:2019-03-06 22:50:48

标签: java sql spring jdbc kotlin

我的UserRespMappings列表没有丢失任何值,并且@data类默认情况下会为其属性生成getter / setter,因此以下异常具有误导性。我只是在Kotlin遇到了一个奇怪的springframework错误吗?

fun batchUpsertUserResponsibilityGroups(users: List<UserRespMapping>) {
    var params = SqlParameterSourceUtils.createBatch(users.toTypedArray())
    namedParameterJdbcTemplate.batchUpdate("""
        INSERT INTO user_resp_groups (user_principal_name, responsibility_group_ids)
        VALUES (:${UserRespMapping::userPrincipalName.name}, cast(:${UserRespMapping::responsibilityGroupIDs.name} as json))
        ON CONFLICT (user_principal_name) DO UPDATE
            SET responsibility_group_ids = EXCLUDED.responsibility_group_ids
    """.trimIndent(), params
    )
}

UserRespMapping.kt

data class UserRespMapping (
    var userPrincipalName: String,
    var responsibilityGroupIDs: String //jsonb
)

'线程“ -hidden-”中的异常org.springframework.dao.InvalidDataAccessApiUsageException:没有为SQL参数'userPrincipalName'提供值:Bean类[[L-hidden-.UserRespMapping;]的无效属性'userPrincipalName': Bean属性'userPrincipalName'不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?'

1 个答案:

答案 0 :(得分:0)

我最终改为使用jdbcTemplate。可读性差很多,但我现在至少不受阻碍。会很高兴接受上面代码中的任何更正-谢谢。