У меня проблемы с JDBI, когда вставляется только первый элемент в списке
data class UserResourceRow(
val userId: UserId,
val roleId: RoleId,
val resource: Resource,
val modified: Instant,
val auditUserId: UserId,
val deleted: Boolean
)
CREATE TABLE `user_resource` (
`user_id` varchar(36) CHARACTER SET ascii NOT NULL,
`resource` varchar(36) CHARACTER SET ascii NOT NULL,
`role_id` int(11) NOT NULL,
`modified_timestamp` timestamp(3) NOT NULL DEFAULT current_timestamp(3),
`audit_user_id` varchar(36) CHARACTER SET ascii NOT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`user_id`,`resource`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb;
@Transaction
@SqlBatch(
"""
INSERT INTO user_resource
VALUES (:userId, :resource, :roleId, :modified, :auditUserId, :deleted)
"""
)
@Throws(JdbiException::class)
fun upsert(@BindBean grants: List<UserResourceRow>): IntArray
Я называю это, например,
val upsert = grantsDao.upsert(grants)
, где гранты список, содержащий эти два
UserResourceRow(userId=22, roleId=123, resource=resource.property.789, modified=2020-05-05T00:48:01.644Z, auditUserId=321, deleted=false)
UserResourceRow(userId=22, roleId=123, resource=resource.property.456, modified=2020-05-05T00:48:01.644Z, auditUserId=321, deleted=false)
, вызов завершается успешно, и upsert возвращает intArray или [-2, -2]
Тот факт, что есть две записи, говорит мне, что он думает, что вставил две строки , но я не понимаю, почему значения intArray равны -2 и -2, разве это не должно быть intArray [1, 1]?
, а таблица содержит только первую запись списка
mysql> select * from user_resource;
+---------+-----------------------+---------+-------------------------+---------------+---------+
| user_id | resource | role_id | modified_timestamp | audit_user_id | deleted |
+---------+-----------------------+---------+-------------------------+---------------+---------+
| 22 | resource.property.789 | 123 | 2020-05-05 00:48:01.644 | 321 | 0 |
+---------+-----------------------+---------+-------------------------+---------------+---------+
1 row in set (0.00 sec)
Тот факт, что он успешно вставил одну запись, говорит мне, что нет проблем с @BindBean сопоставлением столбцов с атрибутами класса данных UserResourceRow, но я не понимаю, почему вставляется только первая запись?