所有されている 1 対多の子クラスの基準に基づいて親クラスの一致を検索する JDOQL クエリ (datanucleus を使用) を作成しようとしています。クエリは次のようになります。
Query lQ = lPm.newQuery("select from "+Module.class.getName()+
" where moduleMappings.contains(m)" +
" && showNameParam.matches(m.criteria.trim())");
lQ.declareVariables(ModuleMapping.class.getName()+" m");
lQ.declareParameters("String showNameParam");
lRet = (List<Module>) lQ.execute("StarTrek");
私のデータセットは次のようになります。
- モジュール[1]
- ModuleMapping[1]: 基準=".*"
- モジュール[2]
- ModuleMapping[1]: 基準=".*StarTrek.*"
- ModuleMapping[2]: 基準=".*StarWars.*"
クエリは何にも一致しません! ただし、matches
JDOQL メソッドへの引数をリテラルに置き換えると、次のようになります。
Query lQ = lPm.newQuery("select from "+Module.class.getName()+
" where moduleMappings.contains(m)" +
" && showNameParam.matches('.*StarTrek.*')");
その 1 つの例では問題なく動作し、私のクエリはModule[2]を見つけます。私は何が欠けていますか?マップされたフィールドの内容を JDOQL メソッドの引数として使用することはできませんか? 何らかの方法で物事をエスケープする必要がありますか?
デイブ