0

次のサンプルクラスの間には1対多の関係があります。

Class Home {
    static hasMany = [loans: Loan]

    int numStories
}

Class Loan {
    static belongsTo = [Bank]

    Home  home
    int   yearIssued 
}

Class Bank {
    SortedSet loans
    static  hasMany   = [loans: Loan]

    boolean active
}

2007年に2階建ての住宅でローンが発行されたすべてのアクティブなBankオブジェクトを取得する名前付きクエリを作成しようとしています。私が試したQueriesという名前の銀行で:

static namedQueries = { 
    myNamedQuery { yearIssued, numStories ->

        eq 'active', true
        loans {
            gt 'yearIssued', yearIssued

            home {
                eq 'numStories', numStories
            }
        }
    }
}

上記の「home{eq...}」の部分を削除すると、クエリは正常に機能し、2階建てに制限されません。上記のように実行すると、次のようなgroovy.lang.MissingMethodExceptionエラーが発生します。

   No signature of method: package.stuff.Home.call() is applicable for argument types
(package.stuff.Bank$__clinit__closure3_closure10_closure20_closure21) 
values: [package.stuff.Bank$__clinit__closure3_closure10_closure20_closure21@746231ed];

    Possible solutions: wait(), last(), save(), any(), getAll(), wait(long)" 

2階建ての住宅にローンを組んでいる銀行に返済する銀行をどのように制限すればよいですか?

4

2 に答える 2

2

さて、何度も試みた後、私は、複数のレベルの関連付けを持つ直接関連付けdslを使用してそれを機能させることができませんでした。エイリアスを使用して動作させることができました。

 static namedQueries = { 
   myNamedQuery { yearIssued, numStories ->
     eq 'active', true
     createAlias 'loans','l'
     createAlias 'l.home','h'
     gt('l.yearIssued', yearIssued)
     eq('h.numStories',numStories)
  }
}

次に、を使用してそれを呼び出します

def bankInstanceList = Bank.myNamedQuery(2007,2).list()

現時点では、これがなぜであるかはわかりません。バグであるか、理解できない設計された動作である可能性があります。

うまくいけば、これは少なくともあなたを動かす...

于 2012-12-12T02:07:03.870 に答える
0

こんにちはケリー

久しぶりにわかりやすくするために、loans-> yearIssued、home-> numStoriesなどの非主キー列に「gt、eq」などの制限を使用していると思います。

そのような状態でのみ、ローン、住宅などの関連パスに移動します。エイリアスを作成する必要があります。

エイリアスはどこに必要ありませんか:

  1. 適用される制限はありません
  2. 関連するエンティティの主キー列にのみ適用される制限。

うまくいけば、これは物事を明確にし、誰かを助けるかもしれません。

于 2016-12-14T18:30:29.523 に答える