Мне нужно выполнить запрос к 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, называемый «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
с обеих сторон соединения.