2017-03-09 79 views
0

我有一個id屬性的簡單類,我想創建一個bigint。JPA BigInteger beeing映射到MySQL的小數?

這裏是財產

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@NotNull 
public java.math.BigInteger id; 

然而,這是產生這樣的:

id decimal(19,2) not null auto_increment 

我當然可以添加

@Column(columnDefinition = "bigint(20)") 

然後它的工作原理,但我不能undarstand爲什麼劑量JPA更喜歡匹配到十進制而不是bigint。

生成的映射也會導致無效ID錯誤,因爲小數點不是auto_incrementable。

我使用spring-boot-starter-data-jpa依賴的spring引導。 配置如下:

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

任何想法?

+1

AUTO_INCREMENT僅適用於整數和浮點類型。請參閱MySQL手冊CREATE TABLE。 AUTO_INCREMENT不適用於DECIMAL – mhasan

+0

是的,我知道這一點。問題更多的是爲什麼jpa映射BigInteger類型的小數? – JustmeVSI

回答

0

JDBC類型BIGINT表示-9223372036854775808和9223372036854775807之間的一個64位有符號整數值。 相應的SQL類型BIGINT是SQL的非標準擴展。在實踐中,SQL BIGINT類型目前尚未被任何主要數據庫實現,我們建議在可移植代碼中避免使用它。

推薦的BIGINT類型的Java映射是Java long

+0

「實際上,SQL BIGINT類型目前尚未由任何主要數據庫實現,我們建議在可移植代碼中避免使用它。」真?哪個主要數據庫不支持'BIGINT'? – Kayaman

+0

很可能是因爲BIGINT可以是無符號的(至少在MySQL中,如果不在其他RDBMS中)。 唯一可以容納64位無符號整數範圍的Java類型是BigInteger。爲此使用long是不正確的,因爲這會將18446744073709551615(264 - 1)轉換爲-1。 –

+0

好的。我嘗試將BigInteger改爲Long,並將其翻譯成MySQL中的bigint(20)。總結一下,BigInteger的規模很大,所以它被映射爲一個小數,因爲這是可以支持Java類型的數據類型。至少這是我對它的理解。 – JustmeVSI