Skip to content

Commit

Permalink
Fix count query with hibernate stateless session
Browse files Browse the repository at this point in the history
  • Loading branch information
encircled committed Sep 15, 2024
1 parent a745458 commit e889b3b
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 95 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package cz.encircled.joiner.core.vendor;

import com.querydsl.core.QueryException;
import com.querydsl.core.QueryModifiers;
import com.querydsl.core.types.EntityPath;
import com.querydsl.core.types.Expression;
Expand Down Expand Up @@ -76,9 +77,29 @@ static class HibernateQueryWithSession<T> extends HibernateQuery<T> {
this.session = session;
}

@Override
public long fetchCount() {
QueryModifiers modifiers = getMetadata().getModifiers();
try {
Query query = doCreateQuery(modifiers, true);
Long rv = (Long) query.uniqueResult();
if (rv != null) {
return rv;
} else {
throw new QueryException("Query returned null");
}
} finally {
reset();
}
}

@Override
public Query createQuery() {
JPQLSerializer serializer = serialize(false);
return doCreateQuery(getMetadata().getModifiers(), false);
}

protected Query doCreateQuery(QueryModifiers modifiers, boolean forCount) {
JPQLSerializer serializer = serialize(forCount);
String queryString = serializer.toString();
logQuery(queryString);
Query query = session.createQuery(queryString);
Expand Down Expand Up @@ -121,7 +142,6 @@ public Query createQuery() {
}
}

QueryModifiers modifiers = getMetadata().getModifiers();
if (modifiers != null && modifiers.isRestricting()) {
Integer limit = modifiers.getLimitAsInteger();
Integer offset = modifiers.getOffsetAsInteger();
Expand All @@ -135,7 +155,7 @@ public Query createQuery() {

// set transformer, if necessary
Expression<?> projection = getMetadata().getProjection();
if (projection instanceof FactoryExpression) {
if (!forCount && projection instanceof FactoryExpression) {
query.setResultTransformer(new FactoryExpressionTransformer((FactoryExpression<?>) projection));
}
return query;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,6 @@ public class HibernateStatelessSessionTest extends AbstractTest {

@Test
public void testStatelessSessionIsUsed() {
/*try {
Field f = HibernateUtil.class.getDeclaredField("TYPES");
f.setAccessible(true);
// remove final modifier from field
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL);
f.set(null, new HashMap());
Map<?, ?> c = (Map<?, ?>) f.get(null);
c.clear();
} catch (Throwable e) {
throw new RuntimeException(e);
}*/
try {
joiner.setJoinerProperties(new JoinerProperties().setUseStatelessSessions(true));

Expand Down Expand Up @@ -73,6 +57,17 @@ public void testHintsInStatelessSession() {
}
}

@Test
public void testCountInStatelessSession() {
try {
joiner.setJoinerProperties(new JoinerProperties().setUseStatelessSessions(true));

joiner.find(Q.count(QAddress.address).where(QAddress.address.name.eq("normalUser1street1").and(QAddress.address.id.gt(0))));
} finally {
joiner.setJoinerProperties(null);
}
}

@Test
public void testDefaultHintsInStatelessSession() {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,11 @@ class JoinerKtTest : AbstractTest() {
assertEquals(7, joinerKt.findOne(QUser.user1.countOf()))
}

@Test
fun ktCountQueryWithPredicate() {
assertEquals(1, joinerKt.findOne(QUser.user1.countOf() where QUser.user1.name.eq("user1")))
}

@Test
fun ktCountQueryIntegrationTest() {
val find = joinerKt.findOne(
Expand Down

0 comments on commit e889b3b

Please sign in to comment.