[英]Mapping the grails/groovy enum to Mysql enum
這是我的環境
Grails Version: 3.1.6
Groovy Version: 2.4.6
JVM Version: 1.8.0_51
build.gradle中的休眠版本
compile "org.hibernate:hibernate-core:5.1.1.Final"
compile "org.hibernate:hibernate-ehcache:5.1.1.Final"
我希望像這樣將枚舉映射到MySql:
| Field | Type | Null | Key | Default | Extra |
| logtype | enum('DEBUG','INFO'| NO | | NULL | |
但是我沒有使它起作用。 我用谷歌搜索了一些建議,但沒有使它們起作用。
這是我的代碼:
package xxxx
class Template {
enum LogType {
DEBUG("DEBUG"), INFO("INFO")
String name
LogType(name){
this.name = name
}
}
Integer tplID
LogType lt
static constraints = {
tplID(nullable: true)
lt(nullable: true)
}
static mapping = {
table "Template"
id name: "tplID"
tplID column: "tplID", comment: "ID"
lt sqlType: "enum", column: "lt", enumType: "DEBUG"
}
}
我在這里閱讀了文檔http://docs.grails.org/3.1.1/ref/Database%20Mapping/column.html
而且我不確定enumType的用法是否正確,有人可以使用它嗎?
更新后,以下代碼仍然不起作用
class Template {
enum LogType {
DEBUG("DEBUG"), INFO("INFO")
String name
LogType(name) {
this.name = name
}
}
LogType lt
static constraints = {
}
static mapping = {
table "Template"
lt sqlType: "enum", enumType: 'string'
}
}
首先回答您的問題-您已在文檔中對其進行了解釋:
enumType(可選)-類型安全的Enum屬性的枚舉類型。 序數或字符串。 鏈接
這意味着您可以使用以下任一方法:
enumType: 'ordinal'
,將使用其序號存儲枚舉 注意:序數是其枚舉聲明中的位置,其中初始常量的序數為零。 鏈接
enumType: 'string'
,它將存儲帶有枚舉名稱的枚舉 ...
對於我在您的代碼中注意到的其他問題:
您無需為枚舉LogType
創建自己的name屬性,枚舉已經具有一個,它等於聲明名稱。
如果它們與類/字段名稱相同,則無需顯式定義表/列名稱。
您的表使用可空ID
編輯:
所以這是您編輯的代碼,帶有我的注釋,可以改進/刪除
class Template {
//no need to define own name field, remove own implementation
enum LogType {
DEBUG("DEBUG"), INFO("INFO")
String name
LogType(name) {
this.name = name
}
}
LogType lt
static constraints = {
}
static mapping = {
table "Template" //name can be infered from domain class name
lt sqlType: "enum", enumType: 'string'
// sqlType is infered from variable
// there is no 'enum' sql type (I think its inherited from hibernate)
// enumType: 'string' is by default
}
}
這可能是您班上提到的變化:
class Template {
enum LogType {
DEBUG, INFO
}
LogType lt
}
編輯2:
我不建議這樣做,但是您可以像這樣配置底層sql類型(未經測試,但應該可以使用):
static mapping = {
lt sqlType: 'enum(DEBUG, INFO)'
}
請注意,您的應用程序現在僅支持MySQL數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.