diff --git a/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/query/runner/CriteriaRunner.java b/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/query/runner/CriteriaRunner.java index 6a880439f..c1c2ffb56 100644 --- a/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/query/runner/CriteriaRunner.java +++ b/jopa-integration-tests/src/main/java/cz/cvut/kbss/jopa/test/query/runner/CriteriaRunner.java @@ -18,7 +18,12 @@ import cz.cvut.kbss.jopa.model.query.criteria.Predicate; import cz.cvut.kbss.jopa.model.query.criteria.Root; import cz.cvut.kbss.jopa.sessions.CriteriaBuilder; -import cz.cvut.kbss.jopa.test.*; +import cz.cvut.kbss.jopa.test.OWLClassA; +import cz.cvut.kbss.jopa.test.OWLClassA_; +import cz.cvut.kbss.jopa.test.OWLClassD; +import cz.cvut.kbss.jopa.test.OWLClassJ; +import cz.cvut.kbss.jopa.test.OWLClassM; +import cz.cvut.kbss.jopa.test.OWLClassT; import cz.cvut.kbss.jopa.test.environment.DataAccessor; import cz.cvut.kbss.jopa.test.environment.Generators; import cz.cvut.kbss.jopa.test.environment.TestEnvironment; @@ -28,14 +33,22 @@ import org.slf4j.Logger; import java.net.URI; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.Set; import java.util.stream.Collectors; import static cz.cvut.kbss.jopa.test.environment.util.ContainsSameEntities.containsSameEntities; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.lessThanOrEqualTo; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; public abstract class CriteriaRunner extends BaseQueryRunner { @@ -426,4 +439,32 @@ public void testSelectByIdentifierAndAttributeEquality() { final OWLClassA result = getEntityManager().createQuery(query).getSingleResult(); assertEquals(instance.getUri(), result.getUri()); } + + /** + * Bug #178. + */ + @Test + public void selectByIdAndRelatedAttributeValueIsCommutative() { + final OWLClassD instance = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassD.class)); + CriteriaBuilder cb = getEntityManager().getCriteriaBuilder(); + final CriteriaQuery queryIdFirst = cb.createQuery(OWLClassD.class); + final Root rootIdFirst = queryIdFirst.from(OWLClassD.class); + queryIdFirst.select(rootIdFirst).where( + cb.equal(rootIdFirst.getAttr("uri"), instance.getUri()), + cb.equal(rootIdFirst.getAttr("owlClassA").getAttr("stringAttribute"), instance.getOwlClassA() + .getStringAttribute(), TestEnvironment.PERSISTENCE_LANGUAGE)); + + final OWLClassD resultIfFirst = getEntityManager().createQuery(queryIdFirst).getSingleResult(); + assertEquals(instance.getUri(), resultIfFirst.getUri()); + + + final CriteriaQuery queryIdSecond = cb.createQuery(OWLClassD.class); + final Root rootIdSecond = queryIdSecond.from(OWLClassD.class); + queryIdSecond.select(rootIdSecond).where( + cb.equal(rootIdSecond.getAttr("owlClassA").getAttr("stringAttribute"), instance.getOwlClassA() + .getStringAttribute(), TestEnvironment.PERSISTENCE_LANGUAGE), + cb.equal(rootIdSecond.getAttr("uri"), instance.getUri())); + final OWLClassD resultIdSecond = getEntityManager().createQuery(queryIdSecond).getSingleResult(); + assertEquals(instance.getUri(), resultIdSecond.getUri()); + } }