Created
June 22, 2018 20:31
-
-
Save andygoossens/5eed865ccfe84857f7e99ddb2dfb5790 to your computer and use it in GitHub Desktop.
Proof of parameter issue with HibernateQuery and Hibernate 5.3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Index: querydsl-examples/querydsl-example-jpa-guice/src/main/resources/META-INF/persistence.xml | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
--- querydsl-examples/querydsl-example-jpa-guice/src/main/resources/META-INF/persistence.xml (revision 2bf234caf78549813a1e0f44d9c30ecc5ef734e3) | |
+++ querydsl-examples/querydsl-example-jpa-guice/src/main/resources/META-INF/persistence.xml (date 1529698078000) | |
@@ -14,7 +14,8 @@ | |
<property name="hibernate.show_sql" value="true" /> | |
<property name="hibernate.flushMode" value="FLUSH_AUTO" /> | |
<property name="hibernate.hbm2ddl.auto" value="create-drop" /> | |
- <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" /> | |
+ <!-- does not work with Hibernate 5.3 --> | |
+ <!--<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" />--> | |
</properties> | |
</persistence-unit> | |
</persistence> | |
\ No newline at end of file | |
Index: pom.xml | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
--- pom.xml (revision 2bf234caf78549813a1e0f44d9c30ecc5ef734e3) | |
+++ pom.xml (date 1529698326000) | |
@@ -590,7 +590,10 @@ | |
<profile> | |
<id>hibernate5</id> | |
<properties> | |
- <hibernate.version>5.0.5.Final</hibernate.version> | |
+ <!-- Works --> | |
+ <hibernate.version>5.2.17.Final</hibernate.version> | |
+ <!-- Fails: java.lang.IllegalArgumentException: Could not locate named parameter [1], expecting one of [] --> | |
+ <!--<hibernate.version>5.3.1.Final</hibernate.version>--> | |
<hibernate.validator.version>5.2.2.Final</hibernate.validator.version> | |
</properties> | |
</profile> | |
Index: querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl/example/jpa/repository/AbstractRepository.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
--- querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl/example/jpa/repository/AbstractRepository.java (revision 2bf234caf78549813a1e0f44d9c30ecc5ef734e3) | |
+++ querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl/example/jpa/repository/AbstractRepository.java (date 1529698584000) | |
@@ -1,15 +1,17 @@ | |
package com.querydsl.example.jpa.repository; | |
+import javax.inject.Inject; | |
+import javax.inject.Provider; | |
+import javax.persistence.EntityManager; | |
+ | |
import com.querydsl.core.types.EntityPath; | |
import com.querydsl.core.types.Expression; | |
import com.querydsl.example.jpa.model.Identifiable; | |
import com.querydsl.jpa.HQLTemplates; | |
+import com.querydsl.jpa.hibernate.HibernateQuery; | |
import com.querydsl.jpa.impl.JPADeleteClause; | |
import com.querydsl.jpa.impl.JPAQuery; | |
- | |
-import javax.inject.Inject; | |
-import javax.inject.Provider; | |
-import javax.persistence.EntityManager; | |
+import org.hibernate.Session; | |
public abstract class AbstractRepository<T extends Identifiable> implements Repository<T, Long> { | |
@@ -24,6 +26,14 @@ | |
return new JPAQuery<>(em.get(), HQLTemplates.DEFAULT).select(select); | |
} | |
+ protected <T> HibernateQuery<T> selectFromHibernateQuery(EntityPath<T> entity) { | |
+ return selectHibernateQuery(entity).from(entity); | |
+ } | |
+ | |
+ protected <T> HibernateQuery<T> selectHibernateQuery(Expression<T> select) { | |
+ return new HibernateQuery<>(em.get().unwrap(Session.class)).select(select); | |
+ } | |
+ | |
protected JPADeleteClause delete(EntityPath<?> entity) { | |
return new JPADeleteClause(em.get(), entity, HQLTemplates.DEFAULT); | |
} | |
Index: querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl/example/jpa/repository/TweetRepository.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
--- querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl/example/jpa/repository/TweetRepository.java (revision 2bf234caf78549813a1e0f44d9c30ecc5ef734e3) | |
+++ querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl/example/jpa/repository/TweetRepository.java (date 1529698923000) | |
@@ -1,11 +1,11 @@ | |
package com.querydsl.example.jpa.repository; | |
+import java.util.List; | |
+ | |
import com.google.inject.persist.Transactional; | |
import com.querydsl.core.types.Predicate; | |
import com.querydsl.example.jpa.model.Tweet; | |
-import java.util.List; | |
- | |
import static com.querydsl.example.jpa.model.QTweet.tweet; | |
@Transactional | |
@@ -23,4 +23,10 @@ | |
public List<Tweet> findAll(Predicate expr) { | |
return selectFrom(tweet).where(expr).fetch(); | |
} | |
+ | |
+ public List<Tweet> findAllWithHibernateQuery(Predicate expr) { | |
+ // we are not using JPAQuery here, but HibernateQuery so that we can | |
+ // potentially do things like calling "setLockMode" | |
+ return selectFromHibernateQuery(tweet).where(expr).fetch(); | |
+ } | |
} | |
Index: querydsl-examples/querydsl-example-jpa-guice/src/test/java/com/querydsl/example/jpa/repository/TweetRepositoryTest.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
--- querydsl-examples/querydsl-example-jpa-guice/src/test/java/com/querydsl/example/jpa/repository/TweetRepositoryTest.java (revision 2bf234caf78549813a1e0f44d9c30ecc5ef734e3) | |
+++ querydsl-examples/querydsl-example-jpa-guice/src/test/java/com/querydsl/example/jpa/repository/TweetRepositoryTest.java (date 1529697479000) | |
@@ -1,14 +1,15 @@ | |
package com.querydsl.example.jpa.repository; | |
+import java.util.Collections; | |
+import java.util.List; | |
+ | |
+import javax.inject.Inject; | |
+ | |
import com.google.common.collect.Lists; | |
import com.querydsl.example.jpa.model.Tweet; | |
import com.querydsl.example.jpa.model.User; | |
import org.junit.Test; | |
-import javax.inject.Inject; | |
-import java.util.Collections; | |
-import java.util.List; | |
- | |
import static com.querydsl.example.jpa.model.QTweet.tweet; | |
import static org.junit.Assert.assertEquals; | |
import static org.junit.Assert.assertTrue; | |
@@ -40,7 +41,7 @@ | |
repository.save(new Tweet(poster, "It is a alive! #YOLO", Collections.<User>emptyList(), null)); | |
repository.save(new Tweet(poster, "Oh the humanity!", Collections.<User>emptyList(), null)); | |
repository.save(new Tweet(poster, "#EpicFail", Collections.<User>emptyList(), null)); | |
- assertEquals(1, repository.findAll(tweet.content.contains("#YOLO")).size()); | |
+ assertEquals(1, repository.findAllWithHibernateQuery(tweet.content.contains("#YOLO")).size()); | |
} | |
@Test | |
@@ -55,12 +56,12 @@ | |
for (int i = 0; i < 100; ++i) { | |
repository.save(new Tweet(poster, "spamming @dr_frank " + i, users.subList(0, 1), null)); | |
} | |
- assertTrue(repository.findAll(tweet.mentions.contains(users.get(1))).isEmpty()); | |
+ assertTrue(repository.findAllWithHibernateQuery(tweet.mentions.contains(users.get(1))).isEmpty()); | |
- assertEquals(100, repository.findAll(tweet.mentions.contains(users.get(0))).size()); | |
+ assertEquals(100, repository.findAllWithHibernateQuery(tweet.mentions.contains(users.get(0))).size()); | |
- assertTrue(repository.findAll(tweet.mentions.any().username.eq("duplo")).isEmpty()); | |
+ assertTrue(repository.findAllWithHibernateQuery(tweet.mentions.any().username.eq("duplo")).isEmpty()); | |
- assertEquals(100, repository.findAll(tweet.mentions.any().username.eq("dr_frank")).size()); | |
+ assertEquals(100, repository.findAllWithHibernateQuery(tweet.mentions.any().username.eq("dr_frank")).size()); | |
} | |
} | |
Index: querydsl-jpa/src/test/java/com/querydsl/jpa/support/TeradataDialect.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
--- querydsl-jpa/src/test/java/com/querydsl/jpa/support/TeradataDialect.java (revision 2bf234caf78549813a1e0f44d9c30ecc5ef734e3) | |
+++ querydsl-jpa/src/test/java/com/querydsl/jpa/support/TeradataDialect.java (date 1529698336000) | |
@@ -141,7 +141,7 @@ | |
return ""; | |
} | |
- @Override | |
+ // Got removed in Hibernate 5.1 @Override | |
public boolean supportsIdentityColumns() { | |
return false; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment