Мне очень любопытно, как можно использовать построитель критериев для доступа к полям унаследованного класса.Grails createCriteria на абстрактном домене
Давайте предположим, что мы имеем следующий класс:
class A {
String fieldOne
String fieldTwo
static hasMany = [childs: AbstractChildClass]
}
и класс ребенка абстрактный будет выглядеть следующим образом:
abstract class AbstractChildClass {
Integer valueOne
Integer valueTwo
A a
static mapping
tablePerHierarchy false
}
}
, конечно, есть несколько простирающихся классов, такие как:
class ExtendingClassOne extends AbstractChildClass {
DesiredObject desiredObject
static mapping = {
tablePerHierarchy false
}
}
также давайте предположим, что есть класс DesiredObject, который выглядит так:
class DesiredObject {
String infoA
String infoB
}
Вопрос заключается в том, как можно было бы получить поля infoA и infoB путем создания критериев для класса A. Мой подход до сих пор это:
A.createCriteria().list {
childs {
desiredObject {
ilike('infoA', '%something%')
}
}
}
Это, конечно, не работает, потому что в table. РасширениеClassOne - это только идентификатор желаемого объекта, и я не знаю, как присоединиться к объекту с помощью построителя критериев, чтобы получить его поля.
Благодарим вас за чтение.
Marco
Спасибо за ваш ответ! К сожалению, я не могу изменить модель, так как существует довольно много расширяющих классов, которые также могут иметь детей, с которых я хочу получить поля. Надеюсь, что есть более элегантный способ, чем создание собственных SQL-запросов. – mwio
не убер-инженер вашей модели домена :) – injecteer