-
Notifications
You must be signed in to change notification settings - Fork 877
Closed
Description
I am invoking this method with 2000 keys, basically I would like to retrieve 2000 records matching these alternate keys using a AK_COL = :key1 OR AK_COL=key2.....
etc
AlternateKeyValue is an abstraction which encapsulates the fieldNames comprising my Alternate key and their values.
public Collection<QueryBase> query(Collection<AlternateKeyValue> akKeys)
{
System.out.println("Constructing Query: " + akKeys.size());
BooleanExpression[] allFieldsMatch = new BooleanExpression[akKeys.size()];
int aKeyIndex = 0;
for (AlternateKeyValue aKey : akKeys)
{
Set<String> fields = aKey.getFieldNames();
BooleanExpression[] expressions = new BooleanExpression[fields.size()];
//Alternate Key can be composite, loop through all the fields
//and create an equality expression predicate for each field
int fieldIndex = 0;
for (String fieldName : fields)
{
Object fieldValue = aKey.getFieldValue(fieldName);
Path<Object> fieldExpr = Expressions.path(Object.class, queryClass, fieldName);
expressions[fieldIndex++] = Expressions.predicate(Ops.EQ, fieldExpr, Expressions.constant(fieldValue));
}
System.out.println("Constructing Expression for : " + aKeyIndex);
//We need an Entity for which all the fields of a Alternate key match
allFieldsMatch[aKeyIndex++] = BooleanExpression.allOf(expressions);
}
System.out.println("End of LOOP");
//We need to get all the Entries in bulk using the OR clause
Predicate anyOfExpr = BooleanExpression.anyOf(allFieldsMatch);
System.out.println("/-----------***********AFTER ANYOF..........");
System.out.println("/-----------***********CHANGES_TAKING EFFECT-----------****************/////");
QueryBase bulkGetQuery = new JPAQuery(null , JPQLTemplates.DEFAULT)
.from(this.queryClass)
.where (anyOfExpr); // For very large values like 5000 this constructor itself throws a Stackoverflow error
bulkGetQuery.list(this.queryClass); //This throws a StackOverFlow exception
}
The Stackoverflow error exception
java.lang.StackOverflowError
at java.lang.Integer.rotateLeft(Integer.java:1128)
at com.google.common.collect.Hashing.smear(Hashing.java:47)
at com.google.common.collect.RegularImmutableSet.contains(RegularImmutableSet.java:49)
at com.mysema.query.jpa.JPQLSerializer.visitOperation(JPQLSerializer.java:393)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:246)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:42)
at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
at com.mysema.query.support.SerializerBase.handle(SerializerBase.java:102)
at com.mysema.query.support.SerializerBase.visitOperation(SerializerBase.java:277)
at com.mysema.query.jpa.JPQLSerializer.visitOperation(JPQLSerializer.java:397)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:246)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:42)
at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
at com.mysema.query.support.SerializerBase.handle(SerializerBase.java:102)
at com.mysema.query.support.SerializerBase.visitOperation(SerializerBase.java:277)
at com.mysema.query.jpa.JPQLSerializer.visitOperation(JPQLSerializer.java:397)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:246)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:42)
at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
at com.mysema.query.support.SerializerBase.handle(SerializerBase.java:102)
at com.mysema.query.support.SerializerBase.visitOperation(SerializerBase.java:277)
at com.mysema.query.jpa.JPQLSerializer.visitOperation(JPQLSerializer.java:397)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:246)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:42)
at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
at com.mysema.query.support.SerializerBase.handle(SerializerBase.java:102)
at com.mysema.query.support.SerializerBase.visitOperation(SerializerBase.java:277)
at com.mysema.query.jpa.JPQLSerializer.visitOperation(JPQLSerializer.java:397)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:246)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:42)
at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
at com.mysema.query.support.SerializerBase.handle(SerializerBase.java:102)
at com.mysema.query.support.SerializerBase.visitOperation(SerializerBase.java:277)
at com.mysema.query.jpa.JPQLSerializer.visitOperation(JPQLSerializer.java:397)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:246)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:42)
at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
at com.mysema.query.support.SerializerBase.handle(SerializerBase.java:102)
at com.mysema.query.support.SerializerBase.visitOperation(SerializerBase.java:277)
at com.mysema.query.jpa.JPQLSerializer.visitOperation(JPQLSerializer.java:397)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:246)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:42)
at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
at com.mysema.query.support.SerializerBase.handle(SerializerBase.java:102)
at com.mysema.query.support.SerializerBase.visitOperation(SerializerBase.java:277)
at com.mysema.query.jpa.JPQLSerializer.visitOperation(JPQLSerializer.java:397)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:246)
at com.mysema.query.support.SerializerBase.visit(SerializerBase.java:42)
at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
Metadata
Metadata
Assignees
Labels
No labels