I have the following code snippet:
public List<EntityA> getAllEntityAByAAndDPaginated(
Collection<Long> a,
Collection<Long> d,
int numberOfResults,
int page
) {
TypedQuery<EntityA> q = entityManager.createNamedQuery(EntityA.GET_BY_A_AND_D,
EntityA.class);
q.setParameter(A, a);
q.setParameter(D, d);
q.setMaxResults((page + 1) * numberOfResults * d.size()); // without this, it works!
return a != null && !a.isEmpty() && d != null && !d.isEmpty()
? q.getResultList() : new ArrayList<>();
}
For performance reasons, I am only loading (page + 1) * numberOfResults * d.size()
results. But executing this, I get a NullPointerException in the last line of the code snippet of the following form:
java.lang.NullPointerException
at java.base/java.util.ArrayList.<init>(ArrayList.java:179)
at org.eclipse.persistence.mappings.ForeignReferenceMapping.prepareNestedJoinQueryClone(ForeignReferenceMapping.java:2455)
at org.eclipse.persistence.mappings.OneToOneMapping.valueFromRowInternalWithJoin(OneToOneMapping.java:1814)
at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRow(ForeignReferenceMapping.java:2177)
at org.eclipse.persistence.mappings.ForeignReferenceMapping.buildCloneFromRow(ForeignReferenceMapping.java:341)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoWorkingCopyClone(ObjectBuilder.java:2007)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneFromRow(ObjectBuilder.java:2260)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:858)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:745)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:699)
at ...
According the exception stacktrace, it seems like it has tried somewhere to add null values to the result list. When I delete the part q.setMaxResults((page + 1) * numberOfResults * d.size());
, it works fine, i.e. this has to cause the NPE somehow.
The database of EntityA does not contain any null values.
How can I fix this?