From 49f91136f6b0cda3aaa9abb94d8e2a92b1ba3ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 25 Feb 2013 18:32:21 +0200 Subject: [PATCH] #248 Use Multimap for query hints --- .../mysema/query/jpa/impl/AbstractJPAQuery.java | 9 ++++++--- .../mysema/query/jpa/sql/AbstractJPASQLQuery.java | 7 ++++--- .../src/test/java/com/mysema/query/JPABase.java | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java index 0f69909dd..6bff6e059 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java @@ -14,7 +14,7 @@ package com.mysema.query.jpa.impl; import java.util.ArrayList; -import java.util.HashMap; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -27,6 +27,9 @@ import javax.persistence.Query; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset.Entry; import com.mysema.commons.lang.CloseableIterator; import com.mysema.commons.lang.IteratorAdapter; import com.mysema.query.DefaultQueryMetadata; @@ -79,7 +82,7 @@ public abstract class AbstractJPAQuery> extends JP } } - protected final Map hints = new HashMap(); + protected final Multimap hints = HashMultimap.create(); @Nullable protected LockModeType lockMode; @@ -165,7 +168,7 @@ public abstract class AbstractJPAQuery> extends JP query.setFlushMode(flushMode); } - for (Map.Entry entry : hints.entrySet()) { + for (Map.Entry entry : hints.entries()) { query.setHint(entry.getKey(), entry.getValue()); } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java index 5e6f9e8e3..1fd7a0e3a 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java @@ -14,7 +14,6 @@ package com.mysema.query.jpa.sql; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -27,6 +26,8 @@ import javax.persistence.Query; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import com.mysema.commons.lang.CloseableIterator; import com.mysema.commons.lang.IteratorAdapter; import com.mysema.query.DefaultQueryMetadata; @@ -69,7 +70,7 @@ public abstract class AbstractJPASQLQuery & com protected final SQLTemplates templates; - protected final Map hints = new HashMap(); + protected final Multimap hints = HashMultimap.create(); @Nullable protected Expression union; @@ -137,7 +138,7 @@ public abstract class AbstractJPASQLQuery & com query.setFlushMode(flushMode); } - for (Map.Entry entry : hints.entrySet()) { + for (Map.Entry entry : hints.entries()) { query.setHint(entry.getKey(), entry.getValue()); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java b/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java index 4e786344a..c37765c9e 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java @@ -106,6 +106,7 @@ public class JPABase extends AbstractStandardTest { javax.persistence.Query query = query().from(QCat.cat) .setHint("org.hibernate.cacheable", true) .createQuery(QCat.cat); + assertNotNull(query); assertTrue(query.getHints().containsKey("org.hibernate.cacheable")); assertFalse(query.getResultList().isEmpty()); @@ -116,6 +117,19 @@ public class JPABase extends AbstractStandardTest { assertFalse(query().from(QCat.cat).setHint("org.hibernate.cacheable", true) .list(QCat.cat).isEmpty()); } + + @Test + @NoHibernate @NoOpenJPA @NoBatooJPA + public void Hint3() { + javax.persistence.Query query = query().from(QCat.cat) + .setHint("eclipselink.batch.type", "IN") + .setHint("eclipselink.batch", "person.workAddress") + .setHint("eclipselink.batch", "person.homeAddress") + .createQuery(QCat.cat); + + assertNotNull(query); + assertEquals("person.homeAddress", query.getHints().get("eclipselink.batch")); + } @Test public void LockMode(){