package org.jbpm.context.exe; import java.util.HashSet; import java.util.Set; import org.hibernate.Query; import org.jbpm.db.AbstractDbTestCase; import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.graph.exe.ProcessInstance; public class VariableQueryDbTest extends AbstractDbTestCase { public void testStringVariableQuery() { ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='variables'>" + " <start-state name='start'/>" + "</process-definition>"); deployProcessDefinition(processDefinition); ProcessInstance one = jbpmContext.newProcessInstanceForUpdate("variables"); one.getContextInstance().setVariable("category", "overpaid"); one.getContextInstance().setVariable("duedate", "tomorrow"); ProcessInstance two = jbpmContext.newProcessInstanceForUpdate("variables"); two.getContextInstance().setVariable("category", "overpaid"); two.getContextInstance().setVariable("duedate", "yesterday"); ProcessInstance three = jbpmContext.newProcessInstanceForUpdate("variables"); three.getContextInstance().setVariable("category", "underpaid"); three.getContextInstance().setVariable("duedate", "today"); newTransaction(); Set expectedPids = new HashSet(); expectedPids.add(new Long(one.getId())); expectedPids.add(new Long(two.getId())); Query query = session.createQuery("select pi.id " + "from org.jbpm.context.exe.variableinstance.StringInstance si " + "join si.processInstance pi " + "where si.name = 'category'" + " and si.value like 'overpaid'"); Set retrievedPids = new HashSet(query.list()); assertEquals(expectedPids, retrievedPids); newTransaction(); expectedPids.clear(); expectedPids.add(new Long(three.getId())); query = session.createQuery("select pi.id " + "from org.jbpm.context.exe.variableinstance.StringInstance si " + "join si.processInstance pi " + "where si.name = 'category'" + " and si.value like 'underpaid'"); retrievedPids.clear(); retrievedPids.addAll(query.list()); assertEquals(expectedPids, retrievedPids); } }