grails findAll tag - PullRequest
       39

grails findAll tag

1 голос
/ 30 июня 2010

Как использовать «SELECT id, name, part, description FROM user» в тегах grails findAll.

Я попытался

 User.findAll("SELECT id, name, part, description FROM user") 

вместо использования

User.findAll("FROM user")

Но показывает ошибки.может кто-нибудь предложить мне тег

спасибо, Шри ..

Ответы [ 4 ]

3 голосов
/ 30 июня 2010

finadAll() возвращает коллекцию доменных объектов, поэтому перечисление столбцов для выбора не имеет смысла; запросы, которые он понимает, не являются реальным SQL и состоят в основном только из предложений WHERE. Поскольку вы, похоже, не хотите ограничивать набор результатов, это, вероятно, все, что вам нужно:

User.findAll()

Возвращает коллекцию всех User объектов. Если вам нужны ограничения, синтаксис ist

User.findAll("from User as u where u.id=?", [userId])

Или, что еще проще, вы можете использовать динамический искатель :

User.findAllById(userId);
1 голос
/ 30 июня 2010

Если вы хотите запускать запросы в стиле отчета, как это, используйте метод executeQuery:

def rows = User.executeQuery("SELECT id, name, part, description FROM User")

Возвращаемое значение будет List of Object [], где каждый элемент в массиве объектов является типомстолбца, т. е. 1-й элемент будет длинным, 2-й - строкой и т. д.

Обратите внимание, что пользователь должен вводиться с большой буквы, поскольку вы ссылаетесь на сущность Hibernate - это не запрос SQL,это HQL.

0 голосов
/ 15 июля 2011

Он вернет ArrayList объектов, которые вам нужны только для доступа к значениям этих объектов. Например:

def result = Code.findAll("from Code as c where c.user_code=?",[pass])
result[0].user_code

Где мой класс Code выглядит примерно так:

class Code {

    String user_code
    boolean flg_active

    static constraints = {

        user_code nullable:true, blank:true, size:0..Text.MID
        flg_active nullable:true, blank:true, default:1
    }
}

Надеюсь, это поможет вам!

0 голосов
/ 30 июня 2010

Если вы хотите запросить только определенные поля, вы можете использовать критерий запроса с проекцией.

Пример:

def userProperties = User.withCriteria {
    projections {
        property('id')
        property('name')
        property('part')
        property('description')
    }
}

Этот запрос вернет массив строк (иликакой бы тип столбца базы данных не отображался) для каждой подходящей строки вместо объекта домена.

...