Grails Many-To-Many - Проблемы динамического поиска
Я надеюсь, что вы можете помочь мне, ребята. Google, к сожалению, не помог мне, и мой поиск здесь в stackru также не помог:-(
У меня есть два DomainClasses HumanResource и Task с отношением многие ко многим.
Модель-Определения:
Задача:
class Tasks {
String name
static belongsTo = [HumanResource]
static hasMany = [humanResources: HumanResource]
//also tried but didn't help -> static fetchMode = [humanResources:"eager"]
}
HumanResource:
class HumanResource {
String name
static hasMany = [tasks: Tasks]
}
Я также попытался добавить индекс в поле id с помощью mapping={}, но я также думаю, что это не решение, это не помогло, и я думаю, что индекс уже существует в поле id.
Итак, что я делал, а что не работает, так это теперь найду все человеческие ресурсы для выполнения поставленных задач! И задачи поступают из Служб, и они уже выбраны в модели Службы с помощью "static fetchMode = [tasks:"eager"]"!
Контроллер-код:
def listHumanResourcesFromTasks = {
def list = HumanResource.findAllByTasks(service.getTasks())
//and I tried also with an own HashMap but didn't work as well
}
Я всегда получаю сообщение об ошибке "org.springframework.dao.InvalidDataAccessResourceUsageException" с SQL-GrammarException. Но я действительно не знаю почему. Объекты "service.getTasks()" полностью заполнены (как я писал с fetchMode = [tasks:"eager"])...
Было бы здорово, если бы кто-нибудь дал мне подсказку о победе.
Большое спасибо за ваше время.
С наилучшими пожеланиями,
Marco
1 ответ
Этот тип запроса не поддерживается - вам нужно использовать HQL или критерий запроса в целом. Но этот конкретный легко, так как у вас есть двунаправленные отношения. Вы можете получить все HumanResource
экземпляры для коллекции Tasks
с этим:
def resources = service.getTasks().collect { it.humanResources }.flatten() as Set
Это должно быть Set
с того же HumanResource
Экземпляр может появляться несколько раз, поэтому вам нужно сжать список в уникальные экземпляры.