В Grails мне бы хотелось, чтобы временная переменная была установлена на основе SQL-запроса.Мне нужно использовать SQL, а не HQL.
(Это упрощенный пример. Использование Grails 3.0.11.)
- Выполнение SQL-запроса
- Какчасть SQL-запроса вычисляет значение для столбца
- . Установите это значение в классе Entity и добавьте в SQL-запрос
- См.
ofLegalAge
/ of_legal_age
ниже
Допустим, у меня есть следующий класс домена
class Person {
String firstName
String lastName
Integer age
static mapping = {table "person"}
}
Тогда у меня будет представление о классе домена человека следующим образом
class PersonView {
Long id
String firstName
String lastName
// ofLegalAge is dynamically set based on query
Boolean ofLegalAge
// Other things based on joins
static transients = [ "ofLegalAge" ]
static mapping = {table "person_view"}
}
Что я хотел бы сделать, это
String sql = """select id,
first_name,
last_name,
-- This is the source for of_legal_age
case when age >= :ageForThisArea
then true
else false
end as of_legal_age
from view_person
where age >= :ageForThisArea"""
def session = sessionFactory.getCurrentSession()
def query = session.createSQLQuery(sql)
query.setParameter("ageForThisArea", age)
query.addEntity(PersonView)
// This should result in a List of PersonView with ofLegalAge set correctly
List<PersonView> theList = query.list()
В основном в конце мне нужно установить ofLegalAge
на основе запроса, однако в конце (после вызова query.list()
) он не устанавливается в PersonView
.