在我的一個領域類中,我需要存儲從有限集合中選擇的一組符號。在我的情況下,可以選擇一個或多個工作日,例如週一和週二。如何在Grails中存儲一組值?
一般而言,我會解決這個問題有一個bitset(位0 =週一,位1 =週二......)
所以我的第一個版本是這樣的:
class SomeDomainClass {
// available elements
static final MON = 1, TUE = 2, WED = 4, THU = 8, FRI = 16, SAT = 32, SUN = 64
// the persistent field and its default value
int businessDays = MON | TUE | WED | THU | FRI
// constraint: not null, not empty and not outside bit set
static constraints = {
businessDays nullable: false, min: 1, max: 127
}
// list getter, returns a list such as [MON, TUE]
def getBusinessDaysList() {
return [MON, TUE, WED, THU, FRI, SAT, SUN].findAll { businessDays & it }
}
// list setter, accepts a list such as [MON, TUE]
void setBusinessDaysList(list) {
businessDays = list.inject { a,b -> a|b }
}
}
但東西告訴我有更好的方法來處理Grails/Hibernate中的這種字段,包括複選框等的自動數據綁定。
我剛剛發現Java有一個高效的類型替代我的自定義位圖:EnumSet。不幸的是,Hibernate/Gorm似乎並沒有以有效的方式堅持這個類,他們只是試圖保存一個序列化的blob。 – Tobia 2015-02-24 10:28:38
您可以隨時爲Hibernate添加自定義類型處理程序來解決這個問題。 – 2015-02-24 10:37:40
我去了7個布爾字段,它只是一週中的7天。但是我會記住EnumSet和將來的自定義類型處理程序。 – Tobia 2015-02-24 10:58:08