0

この質問で Burt Beckwith が提供する解決策を見つけました。ユーザー定義プロパティをドメイン クラスに追加し、状況によってはこれが実行可能なオプションになると思います。これをテストする際に、参照された質問で説明されているように、Map プロパティを持つドメインがあります。これは簡略化されたバージョンです(マップ以外のプロパティは他にもありますが、この質問には関係ありません):

class Space {
    String spaceDescription
    String spaceType
    Map dynForm  

     String toString() {
    return (!spaceType)?id:spaceType + " (" + spaceDescription + ")"
 }  
}

「Test1」:「abc」や「Test2」:「xyz」のように、dynForm マップに任意のデータを保存したスペースのインスタンスがいくつかあります。

このデータのクエリを実行しようとしていますが、HQL を使用して次のようにフィルター処理することに成功しました。

String className = "Space"
Class clazz = grailsApplication.domainClasses.find { it.clazz.simpleName == className }.clazz

def res = clazz.executeQuery("select distinct space.id, space.spaceDescription from Space as space  where space.dynForm['Test1'] = 'abc'  " )  
log.debug "" +  res

selectステートメントでMap dynFormから個々のアイテムを選択する方法があるかどうか知りたいです。このようなもの:

def res = clazz.executeQuery("select distinct space.id, elements(space.dynForm['Test1']) from Space as space  where space.dynForm['Test1'] = 'abc'  " )

次のようにマップ全体を選択できます。

def res = clazz.executeQuery("select distinct elements(space.dynForm) from Space as space  where space.dynForm['Test1'] = 'abc' " )

しかし、文字列 idx に基づいて特定のインスタンスを取得したいだけです。

4

1 に答える 1

0

Criteria を使用するにはどうすればよいですか。ただし、SQL サーバーを持っていないため、まだテストしていません。

def results = Space.createCriteria().list {
    dynForm{
        like('Test1', 'abc')
    }
}
于 2012-05-15T10:06:52.273 に答える