gpt4 book ai didi

java - JDBI SqlBatch仅插入一个条目

转载 作者:行者123 更新时间:2023-12-02 13:43:09 25 4
gpt4 key购买 nike

我在将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,难道它不是[1,1]的intArray吗?

该表仅包含第一个列表项
    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的属性没有问题,但是我不明白为什么只插入第一个条目?

最佳答案

我花了很多时间尝试调试它,但无论JDBI还是驱动程序都找不到任何错误-服务器套接字上的语句看起来不错。 (他们是)

事实证明,这与测试中使用的底层内存数据库之间的细微版本差异有关

        <dependency>
<groupId>ch.vorburger.mariaDB4j</groupId>
<artifactId>mariaDB4j</artifactId>
<version>2.3.0</version>
</dependency>

和mariadbclient使用

        <dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.2.1</version>
</dependency>

因为当我碰到他们

        <dependency>
<groupId>ch.vorburger.mariaDB4j</groupId>
<artifactId>mariaDB4j</artifactId>
<version>2.4.0</version>
</dependency>



        <dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.0</version>
</dependency>

问题不会重现。
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol中有一些有趣的行与版本和批量/批处理语句有关,也许不匹配存在于某处。

关于java - JDBI SqlBatch仅插入一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61604134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com