Я пытаюсь создать запрос 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");
Мой набор данных выглядит примерно так:
- Module [1]
- ModuleMapping [1]: критерии = ". * "
- Module [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.*')");
В этом примере все будет работать, и мой запрос найдет Модуль[2] * 1 029 *.Что мне не хватает?Разрешено ли мне использовать содержимое сопоставленного поля в качестве аргумента метода JDOQL?Мне нужно каким-то образом убежать?
Дейв