我需要映射遗留数据库的Domain类和子类。
我需要使用Grails重新创建的模型是这个表:
CARD_PAYMET和CHEQUE_PAYMENT是PAYMENT的子类,并共享两个字段的组合键:OrderId和PaymentId。
我尝试了一些前场景,但我无法解决问题。然后,没有人重新创建相同的模型数据,我无法更改此模型。
任何人都可以帮助我吗?
感谢。
答案 0 :(得分:0)
您的数据库看起来非常适合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'
}
}
注意:在此示例中,我使用Groovy的EqualsAndHashCode
AST转换来实现Serializable
。
使用域类,您将能够进行GORM多态查询:
def payments = Payment.list() // All Payments (Payment, CardPayment, and ChequePayment).
def cardPayments = CardPayment.list() // Only CardPayments.
...
def nicePayments = Payment.where { amount > 1000 }.list()