Я пытаюсь найти наиболее эффективный / эффективный способ выполнения запроса определенного типа с использованием Grails GORM.
Это сценарий, в котором я хочу запросить все дочерние / связанные элементы в отношении многие-к-одному.Это односторонние отношения, при которых многие стороны использовали идентификатор того, с чем оно связано.
Одним из примеров является связь между учебным годом и семестрами этого учебного года.В таблице семестров в таблице хранится идентификатор учебного года, к которому относится семестр.Учебный год, однако, не имеет ничего, кроме таблицы, на которую он ссылается.Это сделано для того, чтобы количество семестров было гибким.Я надеялся использовать что-то вроде HQL для извлечения всех семестров, которые принадлежат одному и тому же учебному году.В обычном SQL мы можем фильтровать строки, используя столбец идентификатора учебного года таблицы семестра.В HQL это не так просто.Идентификатор учебного года недоступен как свойство класса домена.Вместо этого Hibernate просто использует его для загрузки объекта учебного года.
Должно ли в этом случае работать что-то похожее на приведенное ниже?
select from Semester as s where s.year.id = ?
В этом случае свойство класса домена семестра, в котором содержится учебный год, называется годом.Запрос берет свойство year и идентификатор этого года и использует его для фильтрации семестров.
Это всего лишь один пример, но система, которую я разрабатываю, содержит более одного аналогичного устройства, где было бы желательнозагрузить группу объектов домена, которые имеют один и тот же связанный объект домена.
Может быть более эффективный / действенный способ сделать это.Одним из примеров было бы сделать фактическое значение идентификатора учебного года доступным из класса домена.Это, однако, означало бы, что один и тот же столбец сопоставлен с более чем одним свойством класса домена.Это может и не быть необходимым, но это еще один возможный способ решения такого рода проблем.
Имейте некоторый опыт работы в Hibernate, но некоторые проблемы усложняются в Hibernate, когда вы хотите делать более необычные вещи.