4

基準ビルダーにイライラする問題があります。1人のユーザーが1つのカレンダーを持ち、カレンダーに多くのエントリがあるアプリケーションがあります。簡単そうに見えますが、特定のユーザーのカレンダーエントリを取得しようとすると、ユーザープロパティ(MissingMethodException)にアクセスできません。コードは次のとおりです。

def getEntries(User user) {
  def entries = [ClassName].createCriteria().list() {
    calendar {
      user {
        eq("id", user.id)
      }
    }
  }
}

私は次のバリエーションも試しました:

def getEntries(User user) {
  def entries = [ClassName].createCriteria().list() {
    calendar {
      eq("user", user)
    }
  }
}

それは例外を発生させませんでしたが、どちらも機能しませんでした。

ドメインクラスの関連部分は次のとおりです。

class Calendar {
    static belongsTo = [user: User]
    static hasMany = [entries: Entries]

    ...
}

class User {
    Calendar calendar

    ...
}

class Entry {
    static belongsTo = [calendar: Calendar]

    ...
}

グーグルをしているときに、2008年の初めに指摘された同様の問題に遭遇しました:http: //jira.codehaus.org/browse/GRAILS-1412

しかし、そのリンクによると、この問題はずっと前に解決されているはずです。

私は何が間違っているのですか?

4

5 に答える 5

10

やっとエラー発見!!このエラーは、基準ビルダーとはまったく関係ありませんでした。この場合の問題は、スコープにユーザー変数があったため、ユーザー関係を入力しようとしたときに

calendar {
  user {
    eq("id", user.id)
  }
}

Grails は、ユーザー オブジェクト/変数をクロージャーで呼び出したいと考えました。条件ビルダーを自由に使えるようになりました :-)

皆さんの助けと提案をありがとう!

于 2010-11-01T13:40:08.090 に答える
3

質問のポスターのようなスコープエラーがある場合は、いつでも次のことができます。スコープにユーザー変数があるとしましょう。

def user = User.get(...)
...
calendar {
  'user' {
    eq("id", user.id)
  }
}

それ以外の

def user = User.get(...)
...
calendar {
  user {
    eq("id", user.id)
  }
}
于 2014-09-01T14:10:39.583 に答える
1

あなたの基準が機能しない理由がわかりません。私は常に、それらを完全に正しく機能させ、HQL よりも扱いにくいものを見つけるのにいくつかの問題を抱えていました。

クエリに HQL を使用することもできます。これは、SQL のように見えることに慣れているため、より自然に記述でき、解析しやすいと思います。

HQL でのクエリは次のとおりです。

Entry.executeQuery("from Entry e where e.calendar.user.id = :userId", [userId: theUser.id])
于 2010-03-17T02:25:52.130 に答える
0
def entries = Entries.createCriteria().list() {

なぜエントリーを書いたのですか?クラス名はEntryです。だから私はあなたのラインが読むべきだと言います:

def entries = Entry.createCriteria().list() {
于 2010-10-24T18:54:41.553 に答える
0

ここにあるものです

def getEntries(User user) {
 def entries = Entries.createCriteria().list() {
          calendar { 
             user { 
              eq("id", user.id)
             }
          } 
      }  
}
于 2010-03-17T05:59:49.310 に答える