2

私はgrailsが初めてで、休止状態にはあまり慣れていません。私は、grails でexecuteQueryを使用した休止状態のクエリに関する問題に遭遇しました。このコードを、問題のある元のコードに似たものにしました。

def nonMemberList = Group.executeQuery("select gp.name from Group gp where gp.status = 'CONFIRMED_MEMBER'")
def FemaleMemberList = Group.executeQuery(""" select sum(case when g.isMale = false and g.name not in(:isNotConfirmedMember) from Group g where :startDate <= g.dateCreated and g.dateCreated < :endDate""",
[isNotConfirmedMember: nonMemberList, startDate: startDate, endDate: endDate])

nonMemberListが nullの場合は常にエラーが発生し、 is not構文を使用するときにリストを null にするべきではないことがわかりました。

私は休止状態のクエリにあまり詳しくありません。そのため、元のコードのように動作する他の休止状態のクエリを使用する必要があるという問題があります。あなたの知識を共有してくれてありがとう。

4

4 に答える 4

2

基準を使用しようとしましたか?ここにあります:http://grails.org/doc/latest/guide/GORM.html#criteria

最初にnonMemberListに対して以下のコードを試して、nullが生成されるかどうかを確認してください。

//non member list code
def cNonMember = Group.createCriteria()
def nonMemberList = cNonMember.list() {
    eq("name", "CONFIRMED_MEMBER")
}

それが役に立てば幸い。

于 2012-06-27T06:50:06.307 に答える
1

あなたが求めているのは女性メンバーのようです。非メンバーリストを個別に必要としない場合は、次のようなものを使用して女性のリストを取得できます。

def c = Group.createCriteria()
def females = c.list {
    le('startDate', startDate)
    lt('dateCreated', endDate)
    and {
       ne('status', 'CONFIRMED_MEMBER')
       eq('isMale', false)
    }
}

あなたの例でも不完全な投影があるようです。女性メンバーの数またはプロパティの合計だけが必要な場合は、それを上記に追加できるはずです。

于 2012-06-28T00:44:04.053 に答える
0
def nonMemberList = Group.withCriteria {
    eq('status', 'CONFIRMED_MEMBER')
}.collect { it.name }
于 2012-06-27T13:41:59.617 に答える
0

grailsの構文についてはよくわかりませんが、試してみることができると思います

select sum(case when g.isMale = false " + (nonMemberList == null ? "" : "and g.name not in(:isNotConfirmedMember)") + " from Group g where :startDate <= g.dateCreated and g.dateCreated < :endDate
于 2012-06-27T06:59:39.417 に答える