【发布时间】:2015-08-24 22:04:51
【问题描述】:
这是扩展 Grails 父类和子类的正确方法吗?
最初我认为覆盖 hasMany 和 belongsTo 属性是个好主意,但效果不佳,因为它引入了冲突的功能,所以我从子类中删除了它。
我在这里尝试做的是在多个应用程序之间打包共享代码。我从插件中的这两个类开始。
class Purchase {
String firstName
String lastName
static mapping = {
tablePerHierarchy false
}
static hasMany = [items: PurchaseItem]
}
class PurchaseItem {
BigDecimal price
Integer qty
statiuc belongsTo = [purchase: Purchase]
static mapping = {
tablePerHierarchy false
}
}
应用程序特定的类必须同时扩展 Purchase 和 PurchaseItem 所以我像这样实现它,继承一对多的关系:
class Flight {
static hasMany = [purchases: TicketPurchase]
}
class TicketPurchase extends Purchase {
// some class specific properties
static belongsTo = [flight: Flight]
}
class TicketPurchaseItem extends PurchaseItem
Integer bagQty
static namedQueries = {
ticketPurchaseItemsWithBagsByFlight {flightInstance->
purchase {
flight {
eq 'id', flightInstance.id
}
}
gt 'bagQty', 0
}
}
}
TicketPurchaseItem 中的namedQuery 加入了Purchase 和Flight,即使超类Purchase 不属于Flight,只有子类TicketPurchase 属于。
TicketPurchase ticketPurchase = new TicketPurchase()
ticketPurchase.addToItems(new TicketPurchaseItem(bagQty: 5)).save()
Flight flight = Flight.first()
flight.addToPurchases(ticketPurchase).save()
// this works
def ticketPurchaseItemList = TicketPurchaseItem.ticketPurchaseItemsWithBagsByFlight(flight)
这适用于 Grails,但它是好的设计还是有更好的方法来处理扩展一对多关系的域类?
【问题讨论】:
标签: grails grails-orm