0

Please solve my problem i am trying to run these jpql

the code is that

List<Jewellery> jewelleries;
List<Seller> searchedSellers;  
List<Integer> jewelleryIds;
jewelleries = entityManager
                .createQuery(
                   "SELECT j FROM Jewellery j WHERE j.id = (SELECT jt.id FROM  JewelleryType jt WHERE jt.type = :type)",
        Jewellery.class)
        .setParameter("type", jewelleryType).getResultList();
for (Jewellery j : jewelleries) {
    jewelleryIds.add(j.getId());
}
searchedSellers = entityManager
    .createQuery(
        "SELECT s FROM Seller s WHERE (s.city.id = (SELECT c.id FROM City c WHERE c.city = :parameter1 )) AND (s.jewellery.id in (:parameter2))",
        Seller.class)
        .setParameter("parameter1", city)
        .setParameter("parameter2", jewelleryIds).getResultList();

i found following error in console.log file

java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.ArrayList for parameter
 parameter2 with expected type of class java.lang.Integer from query 
 string SELECT s FROM Seller s WHERE (s.city.id = (SELECT c.id FROM City c WHERE c.city = :parameter1 )) AND (s.jewellery.id in (:parameter2))

please solve the issue. thanks in advance..

skaffman
  • 398,947
  • 96
  • 818
  • 769
abkhan
  • 5
  • 5
  • possible duplicate of [Setting a parameter as a list for an IN expression](http://stackoverflow.com/questions/1557085/setting-a-parameter-as-a-list-for-an-in-expression) – Aleksandr M Jan 09 '15 at 08:29

1 Answers1

1

I think your JPQL Query is invalid, you have to remove brakets for IN clause like :

SELECT s FROM Seller s WHERE (s.city.id = (SELECT c.id FROM City c WHERE c.city = :parameter1 )) AND (s.jewellery.id in :parameter2)
Guillaume S
  • 1,462
  • 2
  • 19
  • 31