1

grailsのfindAllタグで「SELECT id, name, part, description FROM user」を使う方法。

私は試した

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

代わりに

User.findAll("FROM user")

しかし、エラーが表示されます。
タグは何ですか?

4

4 に答える 4

3

finadAll()ドメイン オブジェクトの Collection を返すため、選択する列を列挙しても意味がありません。理解するクエリは実際の SQL ではなく、基本的に WHERE 句のみで構成されています。結果セットを制約したくないように見えるので、おそらくこれで十分です。

User.findAll()

Userすべてのオブジェクトのコレクションを返します。制約が必要な場合、構文は次のとおりです

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

または、さらに簡単に、動的ファインダーを使用できます。

User.findAllById(userId);
于 2010-06-30T12:20:16.603 に答える
1

このようなレポート スタイルのクエリを実行する場合は、executeQuery メソッドを使用します。

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

戻り値は、オブジェクト配列の各要素が列の型である Object[] のリストになります。つまり、1 番目の要素は long、2 番目の要素は String などになります。

Hibernate エンティティを参照しているため、User は大文字にする必要があることに注意してください。これは SQL クエリではなく、HQL です。

于 2010-06-30T15:25:42.067 に答える
0

オブジェクトの値にアクセスするだけでよいオブジェクトの ArrayList を返します。例えば:

def result = Code.findAll("from Code as c where c.user_code=?",[pass])
result[0].user_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
    }
}
于 2011-07-15T12:40:41.370 に答える
0

特定のフィールドのみを照会する場合は、基準クエリと射影を使用できます。

例:

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

このクエリは、ドメイン オブジェクトではなく、一致する行ごとに文字列 (またはデータベースの列の型がマップされているもの) の配列を返します。

于 2010-06-30T16:25:03.013 に答える