Questo sarebbe il modo corretto di estendere le classi padre e figlio di Grails?Estensione della classe di dominio con relazione uno a molti in Grails
Inizialmente pensavo che l'override di hasMany e appartiene alle proprietà, sarebbe una buona idea ma non ha funzionato così bene in quanto ha introdotto funzionalità in conflitto così l'ho lasciato cadere da sottoclassi.
Quello che sto cercando di fare qui è di pacchettizzare codice condiviso tra più applicazioni. Sto iniziando con queste due classi nel mio plugin.
specifiche classiclass 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
}
}
L'iscrizione dovrà estendersi sia Acquisto e PurchaseItem così sto mettendo in atto in questa maniera, ereditare uno-a-molti:
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
}
}
}
Il namedQuery in TicketPurchaseItem unisce Acquisto e Flight anche sebbene l'acquisto super classe non appartenga al volo, solo la sottoclasse TicketPurchase fa.
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)
Questo funziona con Grails, ma è un buon design o c'è un modo migliore per trattare con classi di dominio che si estendono relazioni uno-a-molti?