JPA BigInteger 是否被映射到 MySQL 的十进制?

Jus*_*VSI 2 java mysql jpa spring-boot

我有一个带有 id 属性的简单类,我希望将其创建为 bigint。

这里是物业

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@NotNull
public java.math.BigInteger id;
Run Code Online (Sandbox Code Playgroud)

然而,这是产生这个:

id decimal(19,2) not null auto_increment
Run Code Online (Sandbox Code Playgroud)

我当然可以添加

@Column(columnDefinition = "bigint(20)")
Run Code Online (Sandbox Code Playgroud)

然后它起作用了,但我无法理解为什么 JPA 更喜欢匹配十进制而不是 bigint。

生成的映射还会导致无效 id 的错误,因为小数点不是 auto_incrementable。

我正在使用具有 spring-boot-starter-data-jpa 依赖性的 spring boot。配置如下:

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

小智 7

JDBC 类型 BIGINT 表示 -9223372036854775808 和 9223372036854775807 之间的 64 位有符号整数值。对应的 SQL 类型 BIGINT 是 SQL 的非标准扩展。在实践中,SQL BIGINT 类型目前还没有被任何主要数据库实现,我们建议在可移植代码中避免使用它。

推荐的 BIGINT 类型的 Java 映射是 Java long