【发布时间】:2012-02-02 05:11:57
【问题描述】:
我需要对 2 个旧表运行查询,但两个连接列都不是主键,例如更清楚:
2 个一对一的域类:
class DocumentStatus {
String id
String messageID
static hasOne = [activity: Activity]
static constraints = {
activity unique: true
}
static mapping = {
datasource 'messages'
table 'DocumentStatus'
cache usage: 'read-only'
version false
id column: 'UniqueID', generator: 'assigned'
messageID column: 'MessageID', insertable: false, updateable: false
activity column: 'MessageID', ignoreNotFound: true, cache: true, /*lazy: false, */fetch: 'join'
}
}
和
class Activity {
String id
String messageId
DocumentStatus documentStatus
static belongsTo = [DocumentStatus]
static mapping = {
datasource 'messages'
version false
cache usage: 'read-only'
table 'Activity'
id column: 'aid', generator: 'assigned'
messageId column: 'messageid', insertable: false, updateable: false
documentStatus column: 'messageid', cache: true
}
static constraints = {
documentStatus unique: true
}
}
SQL 运行是(此处仅显示重要部分):
"inner join activity activity_a1_ on this_.uniqueid=activity_a1_.messageid "
但我需要将 DocumentStatus aka "this_" 上的连接列更改为 "messageId"。
where子句基本上是:
def query = DocumentStatus.where {
dateTime >= dateFrom && dateTime <= dateTo &&
status in docStatusList
}
if (buyerId) {
query = query.where {
activity.senderId == buyerId
}
}
def results = query.list(sort: "dateTime", max: 100)
我尝试了各种组合,但在连接的两边都无法比较 messageId。
【问题讨论】:
标签: hibernate grails grails-orm