問題是Galera集羣要求所有表都有一個ID PK。 Grails映射表沒有ID,沒有PK,甚至沒有第一範式。它似乎甚至不會停止重複的條目。grails hasMany映射表 - 如何讓他們使用一個ID(即將它們放在第一個標準格式)
例如爲:
Class Role {
String description
static hasMany [permissions :Permission]
}
Class Permission {
String name
}
這將創建一個表role_permission有以下的列:
- role_permissions_id
- permission_id
沒有ID!
我們嘗試使用liquibase在桌面上放置一個ID,但每次我們使用更新生成版本進行DB差異時,它都會再次關閉 - 我們需要更長久的修復。
我認爲我們可以創造我們自己的映射表:
class role_permission_custom {
Permission permission
Role role
}
但我們怎樣才能Grails的2.5使用呢?
我們不需要任何自動刪除級聯的東西,但我們希望現有的用戶界面工作...
我們嘗試了以下內容:
Class Role {
String description
static hasMany [permissions :Permission]
static mapping = {
permissions joinTable: [name: "role_permission_map", key: "role_id"]
}
}
class RolePermissionMap {
Permission permission
Role role
}
但是,這並不在所有的工作。首先,它不保存映射,當我們創建它們(並且不給任何類型的錯誤):
portalPermission = new Permission(...)
new Role(description: "user",
permissions: [portalPermission, playerViewPermission, transactionsPlayerView]).save(failOnError: true)
其次,該項目現在給:「HeuristicCompletionException:啓發式完成:結果狀態混合」和慣於開始,我們還沒有弄清楚。
我也試過這樣:
class RolePermissionMap {
Permission permission
Role rolePermissions
static mapping = {
version false
}
}
有趣的是,一段時間後,在引導,我得到這個:
Field 'role_permissions_id' doesn't have a default value
嗨,它似乎工作,並沒有我的域類是Serializable。 –