[英]Grails (2.3.11) persistence fields in MySQL have no default value
[英]Grails 2.3.11 - Object failing to persist
我正在嘗試使用Grails 2.3.11修改服務中的某些實體。 我已經簡化為以下代碼:
void updateCompanyType(CompanyType type, Map properties) {
def role = properties.role?.id ==~ /\d+/ ? Role.get(properties.role.id) : null
role.name = "Super New Name"
role.save(failOnError: true, flush: true)
if (type.role != role) {
type.role = role
}
type.name = properties.name
type.save(failOnError: true)
}
類型成功更新,但角色沒有更新。 對為什么有任何見解? 我知道在服務調用中,我處於事務中,因此無論是否有顯式保存調用,我都嘗試過此操作,這似乎沒有什么區別。
部分看一下Role類:
class Role implements Comparable {
Integer id
String name
String code
RoleType roleType
嘗試改變
def role = properties.role?.id ==~ /\d+/ ? Role.get(properties.role.id) : null
成
def role = properties.role?.id ==~ /\d+/ ? Role.get(properties.role.id) : new Role()
如果使用的是Spring Security Role對象,是否已對其進行擴展以將“名稱”添加到該對象? 如果是這樣,您是否在擴展對象中將其定義為“ def name”或“ String name”?
無論哪種方式,如果您在域類中將屬性聲明為“ def”或“ private”,即使您在調試器中查看該屬性,該屬性也將具有該屬性和值,而不會將其持久化到數據庫中。 另外,如果您使用內置的數據庫模式生成器utils和migrations,它實際上是在“角色”表中創建了“名稱”列,還是您手動進行了此操作?
是否需要查看您的域類看起來像“角色”?
我終於通過設置使它起作用
版本為真
在“映射”部分的“我的角色域”對象上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.