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
}

我正在尝试实现 ProductVariantProductPrice 之间的一对多关系,其中联接在 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