jpajpql

Error: Parameter value did not match expected type


I am trying to retrieve a USER from my database using the ID in the WHERE clause. However I am receiving an error and my program is failing.

This is the error I'm receiving when I run my program:

ERROR [org.jboss.as.ejb3.invocation] (default task-19) 
JBAS014134: EJB Invocation failed on component CustomerServiceBeanImpl 
for method public abstract package.name.entity.ICustomer 
package.name.bean.CustomerServiceBean.getCustomerById(long): 
javax.ejb.EJBException: java.lang.IllegalArgumentException: 
Parameter value [19533] did not match expected type [package.name.entity.User (n/a)]

Note: [19533] is a test value I used.

This is the method that is having the error in the CustomerServiceBeanImpl.java:

@Override
public Customer getCustomerById (final long id)
{
    return Customer.getById (this.em, id);
}

This is the method that's being called by the component CustomerServiceBeanImpl:

public static Customer getById (final EntityManager em, final long id)
{
    for (final Customer c : em.createNamedQuery ("Customer.getById", Customer.class)
    .setParameter ("id", id).setMaxResults (1).getResultList ())
    {
        return c;
    }
    return null;
}

The name query is this:

@NamedQuery (name = "Customer.getById", 
query = "SELECT o FROM gnf.Customer o WHERE o.user = :id")

In the Customer.java class itself the relevant column is this one:

@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "user_id")
private User         user;

Doing a quick check of my ERD the "id" column in my "customer" table has a data type of BIGINT. However I'm not sure if that matters. (PostgreSQL database by the way.)

How can I fix this error?


Solution

  • The WHERE clause in your named query seems to be the problem. The attribute user in your Customer.class is of type User and your query expects it to be a type compatible to long.

    ... Parameter value [19533] did not match expected type [package.name.entity.User ...

    So if you need more help on this it would be great to see the complete entities User and Customer.