Examples
Even with what is explained above, there are a few cases that stand out, for which a couple of examples may be necessary. Notably, dealing with language entries and lookups can be challenging.
Here is an example of selecting all algorithm types where the description is like some input:
String likeDescription = ...;
Query query = createQuery("from AlgorithmType_Language algTypeLang join algTypeLang.id.parent algType where algTypeLang.description like :likeDescription and algTypeLang.id.language = :language");
query.bindEntity("language", getActiveContextLanguage());
query.addResult("algType", "algType);
query.bindLikableStringProperty("likeDescription", AlgorithmType.properties.languageDescription, likeDescription);
List algorithmTypes = query.list();
The algorithmTypes
list will contain as elements the algorithm types whose
description is like likeDescription
. Note that the string
likeDescription
will have a trailing '%' appended when it is bound
to the query.
Here is an example of selecting lookup values, with descriptions like an input value:
String description = header.getString(STRUCTURE.HEADER.DESCR);
Query query = createQuery("from LookupValue_Language lookupValLang "
+ "where upper(lookupValLang.description) like upper(:description) and lookupValLang.id.language = :language and "
+ "lookupValLang.id.parent.id.fieldName = 'RPT_OPT_FLG');
query.bindLikableStringProperty("description", LookupValue.properties.languageDescription, description);
query.bindEntity("language", getActiveContextLanguage());
query.addResult("lookupValue", "lookupValLang.id.parent");
query.addResult("description", "lookupValLang.description");
query.orderBy("description");
List results = query.list();
The list results will contain QueryResultRows
, with values keyed by
"lookupValue" and "description".