我正在尝试使用现有旧式旧版db的grails。我到处都有复合键(PK和FK)和...更多FK共享同一个表列。一个例子:
所有表共享“公司”值。
class SalesOrder implements Serializable{
...
static hasMany = [items: SalesOrderItem]
static mapping = {
table 'MYORDERTABLE'
id composite: ["company", "orderId"], generator: "assigned"
比我的销售订单项目:
class SalesOrderItem implements Serializable{
....
Material mat
static belongsTo = [order: SalesOrder]
static mapping = {
table 'MYORDERITEMSTABLE'
id composite: ["order", "lineNumber"], generator: "assigned"
lineNumber column: 'ITEMNUMBER'
columns {
order { column name:'COMPANY'
column name:'ORDERNUMEBR' }
}
所有以前的代码都有效(仅限grails 2.0 M1)。我的“订单”有一个复合PK(公司+ orderId),我的“orderLine”有一个复合PK(公司+ orderId + orderLineId)。
当我有其他属性与复合键共享“公司”属性作为FK的一个元素时出现问题,如
columns{
mat { column name: 'COMPANY', insertable:false, updateable:false
column name: 'MATTYPE'
column name: 'MATCODE'
column name: 'MATCODEEXT1'
column name: 'MATCODEEXT2'
}
}
这不起作用,出现的错误是
Repeated column in mapping for entity: SalesOrderItem
column: COMPANY (should be mapped with insert="false" update="false")
我被困在这里。如果只是一个案例,我会使用一些便宜的&肮脏的解决方法,但我有很多像这样的情况。
你有什么建议吗?暗示?解?任何帮助表示赞赏?
谢谢, 洛伦佐
更新
我发现以下帖子与hibernate的问题基本相同:
should-hibernate-be-able-to-handle-overlapping-foreign-keys
似乎仍然是一个尚未解决的问题:
没有冬眠,我想没有什么样的。至于解决方法,我正在考虑使用事件aferLoad,beforeInsert,beforeUpdate来加载/更新与此FK链接的域类。