Ваша база данных выглядит как подходящая для table-per-subclass inheritance. Во-первых, поскольку вы используете составной первичный ключ, ваши классы домена должны реализовать интерфейс Serializable
. Затем нужно передать каждому столбцу таблицы значение свойства.
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes=['orderId', 'paymentId'])
class Payment implements Serializable {
int orderId
int paymentId
float amount
static mapping = {
version false
tablePerHierarchy false
id composite: ['orderId', 'paymentId']
orderId column: 'OrderId'
paymentId column: 'PaymentId'
/* Assuming case-insensitive db, so I left out 'Amount'. */
}
}
class CardPayment extends Payment {
String cardType
static mapping = {
version false
cardType column: 'CardType'
}
}
class ChequePayment extends Payment {
int checkNumber
static mapping = {
version false
checkNumber column: 'CheckNumber'
}
}
Примечание: В этом примере я использовал EqualsAndHashCode
AST преобразования Groovy для реализации Serializable
.
С классами домена в месте вы будете в состоянии сделать Горм полиморфных запросов:
def payments = Payment.list() // All Payments (Payment, CardPayment, and ChequePayment).
def cardPayments = CardPayment.list() // Only CardPayments.
...
def nicePayments = Payment.where { amount > 1000 }.list()
Как наследование смоделированным в старой базе данных? –
В какой-то момент ваш вопрос неясно. Пожалуйста, прочитайте свой вопрос и добавьте код класса домена. –