Grails 一对多使用自然 ID 和引用的列名
Grails one-to-many using natural ID and referenced column name
我有以下实体:
class ProductVariant {
int id
long sku
static hasMany = [prices: ProductPrice]
}
class ProductPrice {
int id
int priceBandId
long sku
BigDecimal price
}
我正在尝试实现 ProductVariant
和 ProductPrice
之间的一对多关系,其中联接在 sku
而非 id
列.
我已经看到一个例子,它在 Hibernate 中如何使用 sku
列上的 @NaturalId
注释和 [=18= 列中的 referencedColumnName
属性 ] 注释。
是否可以使用 Grails/GORM 实现相同的目的?
这里的关键是每家商店都有自己的一组带有自己 ID 的变体,但价格是按 SKU 级别设置的,并且适用于所有存储相同 SKU 的商店。
事实证明,虽然这在数据库级别上很好,但这并不是您真正要做的事情。 Grails 不会让您仅在主键的一部分上有 hasMany
关联。
相反,我只是通过将 getter 添加到我的 ProductVariant
域对象来检索所有价格,如下所示:
List<ProductPrice> getPrices() {
return ProductPrice.findAll { it.sku == this.sku }
}
然后我可以在需要时使用 productVariant.prices
。
我有以下实体:
class ProductVariant {
int id
long sku
static hasMany = [prices: ProductPrice]
}
class ProductPrice {
int id
int priceBandId
long sku
BigDecimal price
}
我正在尝试实现 ProductVariant
和 ProductPrice
之间的一对多关系,其中联接在 sku
而非 id
列.
我已经看到一个例子,它在 Hibernate 中如何使用 sku
列上的 @NaturalId
注释和 [=18= 列中的 referencedColumnName
属性 ] 注释。
是否可以使用 Grails/GORM 实现相同的目的?
这里的关键是每家商店都有自己的一组带有自己 ID 的变体,但价格是按 SKU 级别设置的,并且适用于所有存储相同 SKU 的商店。
事实证明,虽然这在数据库级别上很好,但这并不是您真正要做的事情。 Grails 不会让您仅在主键的一部分上有 hasMany
关联。
相反,我只是通过将 getter 添加到我的 ProductVariant
域对象来检索所有价格,如下所示:
List<ProductPrice> getPrices() {
return ProductPrice.findAll { it.sku == this.sku }
}
然后我可以在需要时使用 productVariant.prices
。