#248 Use Multimap for query hints

This commit is contained in:
Timo Westkämper 2013-02-25 18:32:21 +02:00
parent a71ac1dad6
commit 49f91136f6
3 changed files with 24 additions and 6 deletions

View File

@ -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<Q extends AbstractJPAQuery<Q>> extends JP
}
}
protected final Map<String,Object> hints = new HashMap<String,Object>();
protected final Multimap<String,Object> hints = HashMultimap.create();
@Nullable
protected LockModeType lockMode;
@ -165,7 +168,7 @@ public abstract class AbstractJPAQuery<Q extends AbstractJPAQuery<Q>> extends JP
query.setFlushMode(flushMode);
}
for (Map.Entry<String, Object> entry : hints.entrySet()) {
for (Map.Entry<String, Object> entry : hints.entries()) {
query.setHint(entry.getKey(), entry.getValue());
}

View File

@ -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<Q extends AbstractJPASQLQuery<Q> & com
protected final SQLTemplates templates;
protected final Map<String,Object> hints = new HashMap<String,Object>();
protected final Multimap<String,Object> hints = HashMultimap.create();
@Nullable
protected Expression<?> union;
@ -137,7 +138,7 @@ public abstract class AbstractJPASQLQuery<Q extends AbstractJPASQLQuery<Q> & com
query.setFlushMode(flushMode);
}
for (Map.Entry<String, Object> entry : hints.entrySet()) {
for (Map.Entry<String, Object> entry : hints.entries()) {
query.setHint(entry.getKey(), entry.getValue());
}

View File

@ -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(){