這裏是我的JPA2/Hibernate的定義:Hibernate的JPA,MySQL和TINYINT(1)布爾代替位或字符
Code:
@Column(nullable = false)
private boolean enabled;
在MySQL此列被解析爲一個位(1)數據類型 - 這不不適合我。對於遺留問題,我需要將布爾值映射到tinyint。但我沒有看到更改默認數據類型的可能性。有沒有?
這裏是我的JPA2/Hibernate的定義:Hibernate的JPA,MySQL和TINYINT(1)布爾代替位或字符
Code:
@Column(nullable = false)
private boolean enabled;
在MySQL此列被解析爲一個位(1)數據類型 - 這不不適合我。對於遺留問題,我需要將布爾值映射到tinyint。但我沒有看到更改默認數據類型的可能性。有沒有?
嘗試NumericBooleanType
。出於某種原因,這並不有一個簡短聲明的類型名稱,所以你不得不使用:
@Column(nullable = false)
@Type(type = "org.hibernate.type.NumericBooleanType")
private boolean enabled;
這確實地圖整數類型,但它可能會很好地工作一個TINYINT。
更新:org.hibernate.type.NumericBooleanType
請問不是在某些RDBMS中使用TINYINT。將數據庫列類型切換爲INTEGER。或者根據需要使用不同的Java @Type值或columnDefinition。
在這個例子中,Dude的答案@Column(nullable = false, columnDefinition = "TINYINT(1)")
可以在沒有任何數據庫更改的情況下工作。
@Type註釋是一個Hibernate註釋。
在完整的JPA2中(使用休眠3.6 +),將布爾字段映射到TINYINT(1)SQL類型而不是BIT(1)的方法是使用columnDefinition屬性。
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;
nb:長度屬性在這種情況下似乎沒有效果,那麼我們使用(1)語法。
隨着休眠4.0+,這種語法可能導致運行時錯誤是這樣的:
Wrong column type Found: bit, expected: TINYINT(1)
看來,在這種情況下,你唯一的辦法就是使用tinyInt1isBit = FALSE MySQL的數據源的連接字符串像這樣:
jdbc:mysql://server_host:3306/database?tinyInt1isBit=false
順便說一句,你現在還可以使用t他length屬性是這樣的:
@Column(nullable = false, columnDefinition = "TINYINT", length = 1)
private boolean enabled;
非常感謝你的兄弟! – 2013-04-05 03:26:11
由於MySQL將'BOOLEAN'替換爲'TINYINT(1)',所以也可以使用'columnDefinition =「BOOLEAN」',它可能更具可讀性。 – eggyal 2013-09-26 09:29:10
你是對的,你也可以使用MySQL的BOOLEAN別名,只要別名被設置爲TINYINT,現在就是這樣。 順便說一下,BOOLEAN和TINYINT都不是標準的SQL數據類型,所以如果您更改數據提供者方言(例如:Oracle),就會冒失敗的風險。 – Donatello 2014-01-27 14:16:03
我有這個錯誤:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/config/context-config.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not determine type for: org.hibernate.type.NumericBooleanType, at table: bookingItem, for columns: [org.hibernate.mapping.Column(enabled)]
而這個工作對我來說:
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;
我使用JPA與Spring數據/休眠5.0一個MySQL數據庫。
在我的實體對象,我把以下內容:
@Column(name = "column_name", columnDefinition = "BOOLEAN")
private Boolean variableName;
我的開發環境具有休眠自動DDL集更新,所以當我部署到dev的,它創建的表類型TINYINT的列名( 1)。
我使用這個列的代碼認爲null爲false,所以我不擔心null,如果是的話,你可以使它成爲一個原始的布爾值或者添加「,nullable = false」給Column註解。
此解決方案完全是JPA(不使用hibernate Type註釋),並且不需要更改連接字符串。
工作正常,但更改位(1)爲int – zaletniy 2012-03-22 12:48:11
-1後,但僅因爲@Dude answer更好。 – Johan 2013-02-22 18:14:56
這是否也適用於布爾對象? – Rafael 2015-03-09 12:27:32