2016-07-26 68 views
0

我有一個User類,我想創建一個新的類叫UserSettingsUserSettings類應該包含用戶ID,這也應該是它自己的ID。GORM id分配給另一個域類

UserSettings看起來是這樣的:

class UserSettings { 
    String listDefaultTimePeriod = "today" 
    User user 
    static mapping = { 

     id generator: 'assigned', name: 'user' 
     user column: 'user_id' 

    } 
} 

如果我啓動項目我得到這個錯誤:

Caused by: org.hibernate.MappingException: Could not determine type for: User, at table: user_settings, for columns: [org.hibernate.mapping.Column(user_id)] 

我該如何映射UserSettings正確使用USER_ID作爲主鍵?

+0

使用'static hasOne = [user:User]'而不是'User user'。在這種情況下,你也不需要用戶列:'user_id' – injecteer

回答

0

我覺得我沒理解錯的話...(現在絆倒在了一個一對一的關聯同樣的問題...)

擁有「UserSettings類應包含用戶ID也應該是自己的ID。「我發現下面的解決方案(爲一到一個協會):

class User { 
    String name 

    static hasOne = [setting: UserSetting] 

    static mapping = { 
     id column: 'user_id' 
     setting cascade: 'all-delete-orphan' 
    } 

    static constraints = { 
     setting unique: true 
    } 
} 

class UserSetting { 

    static belongsTo = [user: User] 

    String listDefaultTimePeriod = "today" 

    static mapping = { 
     id column: 'user_id', generator: 'foreign', params: [property: 'user'] 
     user insertable: false, updateable: false 
    } 

} 

鏈接Hibernate文檔的「洋」發電機: hibernate generators

和鏈接到博客,帖子我發現,描述這個解決方案: Grails foreign id generator

0

如果您有UserSetting與User的關係,則用戶的ID在數據庫中自動被稱爲'user_id'。

我會設計類的方式如下: (請記住,這不是每個數據庫,您可以命名錶「用戶」 ...)

class User { 

    String name 

    static hasMany = [settings: UserSetting] 

} 

class UserSetting { 

    static belongsTo = [user: User] 

    String listDefaultTimePeriod = "today" 

    static mapping = { 
     table 'user_settings' 
     id generator: 'assigned' 
    } 

} 

和Controller保存方法,你必須填寫的USER_ID到像user_settings_id:

@Transactional 
def save(UserSetting userSettingInstance) { 
    ... 
    userSettingsInstance.id = userSettingsInstance.user.id 
    ... 
} 

- 我prefere命名班級爲SingleInstance和數據庫的傢伙prefere有命名爲多表...(多數民衆贊成的理由表格映射)。

相關問題