java - 如何使用 JPA 将 BigInteger 存储在 H2/PSQL 数据库中?

标签 java jpa spring-data-jpa h2

我正在尝试将 SHA256 哈希存储为数值,这似乎是从空间和索引 POV 执行此操作的最佳方法。我使用 JPA 进行简单的字段定义:

@NonNull
private BigInteger mybiginteger;

但是,它拒绝插入该值。

我在单元测试期间使用 H2 数据库,现在我在 JPA 中添加了 BigInteger 值,但它失败了

Caused by: org.h2.jdbc.JdbcSQLDataException: Value too long for column "MYBIGINTEGER DECIMAL(19, 2)": "-12804752987762098394035772686106585063470084017442529046078187006797464553387.00 (79)"; SQL statement:

跳过测试用例并使用 Postgres 进行尝试,它也失败了

Caused by: org.postgresql.util.PSQLException: ERROR: numeric field overflow
  Detail: A field with precision 19, scale 2 must round to an absolute value less than 10^17.

JPA 根据 DB 工具将其创建为 numeric(19,2) 字段。我可以手动更改列定义并且它可以工作,但不能将其设置为在 H2 和 PSQL 之间可移植。

如何使用 JPA 在 H2/PSQL 数据库中正确存储 BigInteger? 另外,为什么 BigInteger 类型允许两位小数?

最佳答案

我通过在属性上添加以下注释解决了这个问题。

@Column(columnDefinition = "BIGINT")

关于java - 如何使用 JPA 将 BigInteger 存储在 H2/PSQL 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62413317/

相关文章:

java - 在服务器内部调用 Web 服务

java - 如何将 .p12 或 pem 证书导入 java keystore ?

java - 加速 Jetty 上的应用程序启动

java - OneToOne + 无 Foreginkey + 单向 + Datamissing => EntityNotFoundException

spring-data-jpa - 如何将@EntityGraph批注分配给Spring Data JPA存储库.findAll()

java - 无需单击即可切换 JToggleButton,并取消设置样式

java - 组装 jar 后 - 没有名为 EntityManager 的持久性提供程序

spring - 如何使用 Spring Data JPA 启用基本缓存

java - JpaRepository.save() 方法在内部是如何工作的

java - 增强并删除 while 循环中的冗余长度检查