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

Java JPA BigInteger是否映射到MySQL的十进制?,java,mysql,jpa,spring-boot,Java,Mysql,Jpa,Spring Boot,我有一个简单的类,它有一个id属性,我希望将其创建为一个bigint 这是物业 @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @NotNull public java.math.BigInteger id; 然而,这会产生以下结果: id decimal(19,2) not null auto_increment 我当然可以补充 @Column(columnDefinition = "bigint(20)") 然后它工作了,但我

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

这是物业

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@NotNull
public java.math.BigInteger id;
然而,这会产生以下结果:

id decimal(19,2) not null auto_increment
我当然可以补充

@Column(columnDefinition = "bigint(20)")
然后它工作了,但我无法理解为什么JPA更喜欢匹配十进制而不是bigint

生成的映射还会导致无效id的错误,因为十进制数不可自动递增

我正在使用SpringBoot和SpringBootStarter数据jpa依赖性。 配置如下:

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create

有什么想法吗?

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


BIGINT类型的推荐Java映射为Javalong

自动增量,仅适用于整数和浮点类型。请参阅MySQL手册,创建表。自动增量不适用于小数是的,我知道。问题更多的是关于jpa为什么映射十进制的BigInteger类型?“实际上,SQL BIGINT类型目前还没有被任何主要数据库实现,我们建议在可移植代码中避免使用它。”真的吗?哪个主要数据库不支持
BIGINT
?很可能是因为BIGINT可以不签名(至少在MySQL中,如果在其他RDBMS中不支持的话)。唯一可以容纳64位无符号整数的完整范围的Java类型是BigInteger。在这里使用long是不正确的,因为这会将18446744073709551615(264-1)转换为-1。我尝试将biginger更改为Long,并在MySQL中将其转换为bigint(20)。总之,BigInteger在某种程度上是大的,所以它被映射到一个十进制,因为这是可以支持java类型的数据类型。至少这是我对它的理解。