gpt4 book ai didi

java - Spring数据,Oracle DB,java.sql.SQLException : Numeric Overflow

转载 作者:行者123 更新时间:2023-12-01 18:49:58 25 4
gpt4 key购买 nike

在我的应用程序(Oracle DB[11g]、Spring data、Java 8)中,我使用如下 ID 映射了我的实体:

@Column(name = "MYID")
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MY_SEQUENCE")
@SequenceGenerator(sequenceName = "MY_SEQUENCE", allocationSize = 1, name = "MY_SEQUENCE")
private Integer id;

在 oracle 列中,类型为 NUMBER(38,0)

对于某些数据,当我尝试 findById 时,应用程序会抛出:SQL 错误:17026,SQLState:null - 数字溢出。

我尝试更改 java 实体的类型,例如 long、BigDecimal 和 BigInteger,但我收到来自 Hibernate 的转换 Integer 异常。

我无法更改数据库中表的定义。

如何解决这个问题?

谢谢

最佳答案

如果您的数据库列数据类型定义为 NUMBER(38,0),则永远不应该使用 Integer 数据类型,因为此格式可能存储比单精度整数

更安全的是使用Long,它涵盖 double 整数。要查看您的数据是否在 Long 覆盖的范围内,请执行此查询(替换表和列名称)

select AGE from author_tab 
where not (-power(2,63) <= AGE and AGE <= power(2,63)-1)

如果没有返回数据,您就处于Long的安全范围

作为最后的手段,请使用 BigInteger您可以将其精确修剪为您的数据库数据类型

@Column(precision=38, scale=0)
BigInteger age

关于java - Spring数据,Oracle DB,java.sql.SQLException : Numeric Overflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757283/

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