java - Oracle DB 19c 返回的自动生成键的负值
问题描述
我们使用 Oracle 数据库 (19c) 中的 IDENTITY 列作为表的主键。
对于一些内部逻辑,我们使用 getAutoGeneratedKeys() 来获取创建的实体的 ID。但结果集中返回的 ID 存在一些差异。
以下是获取自动生成的密钥的代码。
String keyCols[] = {"ID"};
ps = connection.prepareStatement(queryToInsertEntity, keyCols);
ps.executeBatch();
resultSet = ps.getGeneratedKeys();
while (resultSet.next()) {
logger.trace("Entity ID:{}", resultSet.getBigDecimal(1));
}
例如,对于几个实体,结果集返回的 ID 类似于一个(带有负值):实体 ID:-4.3692522E-31
而且,对于几个实体,返回的 ID 如下
实体 ID:1591017024
所以问题是为什么 resultSet.getBigDecimal() 在不同的时间返回不同的值。实体永远不能有负 ID,因为 Identity 列的最小值是 1。
它是否与 getAutoGeneratedKeys() 方法有关?
解决方案
推荐阅读
- laravel - 具有多个房间的酒店预订系统的 Laravel 查询范围编辑方法
- java - 如何使用两个对象中最特殊的类型作为返回类型?
- python - 我如何在熊猫中分组然后对值求和?
- batch-file - 存在和复制或不存在,制作目录和复制
- python - 从自定义索引 setup.py 安装
- sql-server - 如何优化我的存储过程,使其运行得更快
- php - CodeIgniter 用空格替换“+”
- php - Array($row['image']) 在 $pdf->image 中不可用
- asp.net - 异常“当前上下文中不存在名称‘BindItem’”
- java - @RequestMapping 如何在 Spring Boot 应用程序中工作