我有GORM问题。
我尝试使用hasMany
将一个域对象映射到另一个域。
class PrototypePriceModifierCode {
...
static hasMany = [activitys:Activity]
...
}
由于我在课程Activity
中不需要反向引用,因此我没有引用PrototypePriceModifierCode
。
只有这样才能按预期(1)创建我的映射表。
prototype_price_Modifier_code_id activity_id
在Activity
中,我需要对PrototypePriceModifier
的引用,这与上述映射表无关。
问题是我定义
后不再生成映射表class Activity{
...
PrototypePriceModifierCode prototypePriceModifierCodeAttached
如何在我的Activity域类中创建和引用PrototypePriceModifierCode
的映射表?
答案 0 :(得分:0)
试试这样:
class Activity {
static belongsTo = [PrototypePriceModifierCode]
}
这样,activity
表格中会有一列PrototypePriceModifierCode
,而不是为hasMany
创建单独的表格。
答案 1 :(得分:0)
当Activity
没有prototypePriceModifierCodeAttached
属性时,hasMany
中的PrototypePriceModifierCode
会导致单向一对多关联。在数据库中,这是通过映射表实现的。
但是,当Activity
具有prototypePriceModifierCodeAttached
属性时,关联会更改为双向一对多。在数据库中,这意味着activity
表具有指向它的外键prototype_price_modifierCode
,因此不使用映射表。您可以详细了解这些差异here。
如果你想要一个单向的一对多和属性Activity.prototypePriceModifierCodeAttached
,你可以创建一个查找PrototypePriceModifierCode
的getter方法:
class Activity {
PrototypePriceModifierCode getPrototypePriceModifierCodeAttached() {
PrototypePriceModifierCode.where {
activitys.id == this.id
}.get()
}
}
这里的缺点是GORM无法进入该物业;无法查询。
另一方面,如果您想要的是price_modifier_code_id
表格中的activity
列,则可以将其添加为long
:
class Activity {
long prototypePriceModifierCodeAttached
static mapping = {
prototypePriceModifierCodeAttached column: 'price_modifier_code_id'
}
}
这使得可以在属性上使用GORM查询,但仅限于PrototypePriceModifiedCode
ID,而不是域类实例本身。
只要您愿意进行一些维护,就可以结合使用这两种方法:
class Activity {
long priceModifierCodeId // <--- You gotta maintain this property manually.
PrototypePriceModifierCode getPrototypePriceModifierCodeAttached() {
PrototypePriceModifierCode.get(priceModifierCodeId)
}
}
注意:活动拼写错误。它应该是活动。
答案 2 :(得分:0)
我最终使用String save逗号分隔的ID。
String activitys
this.activitys.split(',')each{
p.activitys.add(Activity.get(Long.parseLong(it)))
}
由于我在这里不需要参考完整性,这对我来说很好。