我们有两个域类,如下所示
package com.x.y.z;
Class A {
String name
String status
String specialID
static mapping = {
id type:Long, sqlType:'INT'
}
}
package com.x.y.z;
Class B {
A a
String name
}
现在,当我们启动服务器并且表中的数据开始在批量加载时在 Elastic 中建立索引时,我们会收到错误消息
由 ObjectNotFoundException 引起:不存在具有给定标识符的行:[com.x.y.z.A#300]
消息:无法编码域实例 [com.x.y.z.B : 675]
可能发生的是当编码 B 时,对象正在 A.id 中搜索 FK,而它实际上应该在查看 A.specialID。我能够在 DB 中查找 specialID 300,而表 A 的 ID 中没有 300。我们希望 B 的实例查找 A.specialID 而不是默认的 A.id。这可能吗?我们没有使用 hasOne 映射,因为在这种情况下双向映射不合适。感谢任何有关映射的帮助。
最佳答案
我假设域类的 id A
是 specialID
.如果是这种情况,那么您可以像这样更改默认值的 id 属性:
Class A {
...
static mapping = {
id type:Long, sqlType:'INT', name: 'specialID'
}
}
我不确定表
a
的主键是什么,但假设它是... foo
,那么您可以像这样设置列: Class A {
...
static mapping = {
id type:Long, sqlType:'INT', name: 'specialID', column: 'foo'
}
}
您可以在 Grails documentation 中阅读有关 id 映射的更多信息。 .
关于hibernate - 复合类中不同 FK 的 Grails GORM 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33767795/