2016-07-26 66 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有命名为多表...(多数民众赞成的理由表格映射)。

相关问题