Skip to content

Support serialization of any() paths in Querydsl JPA #1062

@jotomo

Description

@jotomo

This is the same as #904, but for the JPA module. I can use any() in predicates in tests that run on the same JVM. But when running an integration tests, where I have a client that serializes a predicate containing any(), and a server which deserializes the predicate (on another JVM), then I'm getting this exception when attempting to execute the predicate (via Spring Data JPA):

Caused by: java.lang.IllegalArgumentException: Undeclared path 'standort'. Add this path as a source to the query to be able to reference it.
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:78)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:30)
    at com.mysema.query.types.path.ListPath.accept(ListPath.java:77)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:65)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:30)
    at com.mysema.query.types.expr.SimpleOperation.accept(SimpleOperation.java:61)
    at com.mysema.query.types.ValidatingVisitor.visitJoins(ValidatingVisitor.java:123)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:87)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:30)
    at com.mysema.query.types.SubQueryExpressionImpl.accept(SubQueryExpressionImpl.java:57)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:65)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:30)
    at com.mysema.query.types.expr.BooleanOperation.accept(BooleanOperation.java:61)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:65)
    at com.mysema.query.types.ValidatingVisitor.visit(ValidatingVisitor.java:30)
    at com.mysema.query.types.OperationImpl.accept(OperationImpl.java:91)
    at com.mysema.query.DefaultQueryMetadata.validate(DefaultQueryMetadata.java:351)
    at com.mysema.query.DefaultQueryMetadata.addWhere(DefaultQueryMetadata.java:193)
    at com.mysema.query.support.QueryMixin.where(QueryMixin.java:426)
    at com.mysema.query.support.QueryBase.where(QueryBase.java:127)
    at com.mysema.query.jpa.JPAQueryBase.where(JPAQueryBase.java:32)
    at org.springframework.data.jpa.repository.support.QueryDslJpaRepository.createQuery(QueryDslJpaRepository.java:139)
    at org.springframework.data.jpa.repository.support.QueryDslJpaRepository.findAll(QueryDslJpaRepository.java:115)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606

I reported another bug earlier, which also steemed from my setup of having a predicate serialized on one JVM and deserialized on another, which was caused by a bug in the caching code. In case it's releated it's #481.
P.S. The predicate is of the form QStandort.standort.detailsSet.any().detailField.isNotEmpty()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions