2016-07-26 10 views
0

私はUserクラスを持っています。UserSettingsという新しいクラスを作成したいと思います。 UserSettingsクラスには、自分自身の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)] 

は、どのように私は主キーとしてのuser_idを使用するように正しくUserSettingsをマッピングすることができますか?

+0

'ユーザのユーザ 'の代わりに'静的なhasOne = [ユーザ:ユーザ] 'を使ってください。この場合、 'user column: 'user_id''も必要ありません – injecteer

答えて

0

私は...正しくあなたを理解していなかったと思います(と一対一の関連について同じ質問の上に今つまずい...)

「UserSettingsクラスが含まれているべきである持っているために、自分自身のIDでなければならないユーザID。私は、(1対1の関連用)は、次の解決策を見つけた:

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 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' 
    } 

} 

と保存方法コントローラで、あなたのようなuser_settings_idへのuser_idを記入する必要があります。

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

- 私はSingleInstanceとしてクラスに名前を付けるためにprefereとデータベースの連中が複数という名前のテーブルを持ってprefere ...(理由のthatsテーブルマッピング)。

関連する問題