分配给另一个域的 GORM id class
GORM id assigned to another domain class
我有一个 User
Class,我想创建一个名为 UserSettings
的新 Class。
UserSettings
class 应该包含用户 ID,它也应该是它自己的 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 作为主键?
如果您有从 UserSetting 到 User 的关系,则在数据库中自动调用用户 ID 'user_id'。
我会按以下方式设计 classes:
(请记住,并非每个数据库都允许您命名 table 'user'...)
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_id 填充到 user_settings_id,例如:
@Transactional
def save(UserSetting userSettingInstance) {
...
userSettingsInstance.id = userSettingsInstance.user.id
...
}
- 我更喜欢将 class 命名为 SingleInstance,而数据库人员更喜欢将 table 命名为多个...(这就是 table 的原因映射)。
我想我没有正确理解你......(现在偶然发现了一对一关联的同一个问题......)
为了 "The UserSettings class should be contain the User ID which also should be the ID of itself." 我找到了以下解决方案(对于一对一关联):
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
}
}
link "foreign" 生成器的休眠文档:
hibernate generators
还有我发现的博客 post link,描述了这个解决方案:
Grails foreign id generator
我有一个 User
Class,我想创建一个名为 UserSettings
的新 Class。
UserSettings
class 应该包含用户 ID,它也应该是它自己的 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 作为主键?
如果您有从 UserSetting 到 User 的关系,则在数据库中自动调用用户 ID 'user_id'。
我会按以下方式设计 classes: (请记住,并非每个数据库都允许您命名 table 'user'...)
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_id 填充到 user_settings_id,例如:
@Transactional
def save(UserSetting userSettingInstance) {
...
userSettingsInstance.id = userSettingsInstance.user.id
...
}
- 我更喜欢将 class 命名为 SingleInstance,而数据库人员更喜欢将 table 命名为多个...(这就是 table 的原因映射)。
我想我没有正确理解你......(现在偶然发现了一对一关联的同一个问题......)
为了 "The UserSettings class should be contain the User ID which also should be the ID of itself." 我找到了以下解决方案(对于一对一关联):
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
}
}
link "foreign" 生成器的休眠文档: hibernate generators
还有我发现的博客 post link,描述了这个解决方案: Grails foreign id generator