質問

私の悔しい問題の基準のビルダを構築します。私は申請するユーザーは、カレンダー、カレンダーには多くの作品の応募がありました。うかがってみてはカレンダー作の指定されたユーザーできるようになアクセスし、ユーザー物件(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]

    ...
}

時Googlingで出会った同様の問題は早期2008年http://jira.codehaus.org/browse/GRAILS-1412

ものによるリンクはこの問題のすべて解決しました。

なぜですか?

役に立ちましたか?

解決

私は最終的にエラーを見つけました!エラーは、すべての基準ビルダーとは関係ありませんでした。この場合の問題点は、私は

により、ユーザ関係を入力しようとしたとき、私は、スコープ内のユーザー変数を持っていたことでした
calendar {
  user {
    eq("id", user.id)
  }
}

Grailsは、私は閉鎖を持つユーザーオブジェクト/変数をコールしたいと思いました。私は再び自由に基準ビルダーを使用することができます - )

すべてのご協力や提案みんなありがとう!

他のヒント

あなたが質問のポスターのようなスコープのエラーが発生した場合は、

は、必ず次のことを行うことができます。

を使用し、その後、あなたは自分のスコープ内のユーザー変数を考えてみましょう
def user = User.get(...)
...
calendar {
  'user' {
    eq("id", user.id)
  }
}

の代わりに

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

私はあなたの基準が機能しない理由はわかりません。私は常にいくつかの問題は全く正しい仕事とHQLよりもそれらをより手間のかかる見つけるためにそれらを取得しなければならなかった。

あなたはちょうど私が私がSQLとして探しに慣れているので解析するより多くの書き込みが自然と簡単に見つけた、クエリのHQLを使用することができます。

ここにあなたのクエリはHQLでいます:

Entry.executeQuery("from Entry e where e.calendar.user.id = :userId", [userId: theUser.id])

ここ

のものです
def getEntries(User user) {
 def entries = Entries.createCriteria().list() {
          calendar { 
             user { 
              eq("id", user.id)
             }
          } 
      }  
}
def entries = Entries.createCriteria().list() {

なぜなたが書いたもので 応募?おClassnameが .いうラインを読む:

def entries = Entry.createCriteria().list() {
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top