hibernate - QueryDSL SubQuery not working - IllegalArgumentException: Parameter value did not match expected type -


i'm trying run query subquery in querydsl 4.1.4. equivalent in version 3.x worked can't seem work in version 4.1.4. not sure if i'm missing or if there bug. input appreciated!

here relevant code:

pathbuilder productentity = ...; pathbuilder categoryentity = ...;  jpqlquery query = queryfactory.get().query(); query.distinct();  filteredclause subquery = jpaexpressions     .select(productentity.get("id", long.class))     .from(categoryentity)     .innerjoin(categoryentity.get("products"), productentity)     .where(categoryentity.get("id", long.class).eq(categoryid));  query.where(productentity.get("id", long.class).notin(subquery)); query.fetch(); 

with above, following exception:

java.lang.illegalargumentexception: parameter value [select product.id category category   inner join treat(category.products product) product category.id = ?1] did not match expected type [java.lang.long (n/a)]     @ org.hibernate.jpa.spi.basequeryimpl.validatebinding(basequeryimpl.java:897)     @ org.hibernate.jpa.internal.queryimpl.access$000(queryimpl.java:61)     @ org.hibernate.jpa.internal.queryimpl$parameterregistrationimpl.bindvalue(queryimpl.java:235)     @ org.hibernate.jpa.internal.queryimpl$jpapositionalparameterregistrationimpl.bindvalue(queryimpl.java:371)     @ org.hibernate.jpa.spi.basequeryimpl.setparameter(basequeryimpl.java:692)     @ org.hibernate.jpa.spi.abstractqueryimpl.setparameter(abstractqueryimpl.java:181)     @ org.hibernate.jpa.spi.abstractqueryimpl.setparameter(abstractqueryimpl.java:32)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:483)     @ org.springframework.orm.jpa.sharedentitymanagercreator$deferredqueryinvocationhandler.invoke(sharedentitymanagercreator.java:372)     @ com.sun.proxy.$proxy365.setparameter(unknown source)     @ com.querydsl.jpa.impl.jpautil.setconstants(jpautil.java:56)     @ com.querydsl.jpa.impl.abstractjpaquery.createquery(abstractjpaquery.java:102)     @ com.querydsl.jpa.impl.abstractjpaquery.fetchcount(abstractjpaquery.java:81) ... 

it seems whole subquery set parameter , hibernate isn't happy it. there different querydsl syntax should using avoid issue?

i figured out problem subquery being of type filteredclause. didn't cause compile errors, might better handled querydsl after changing subquery below things started working:

jpqlquery subquery = jpaexpressions     .select(productentity.get("id", long.class))     .from(categoryentity)     .innerjoin(categoryentity.get("products"), productentity);  // keep .where() call separate retain jpqlquery object subquery.where(categoryentity.get("id", long.class).eq(categoryid));  // subquery of type jpqlquery instead of filteredclause query.where(productentity.get("id", long.class).notin(subquery));  list result = query.fetch(); 

Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -