Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Parameter value did not match expected type

Tags:

jpa

jpql

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?

like image 231
CSLearner Avatar asked May 20 '16 20:05

CSLearner


2 Answers

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.

like image 143
ptr Avatar answered Dec 04 '22 19:12

ptr


It is happening because in your database the parameter will be a @oneToOne object and you have to call the id inside the Object so you have to give the query as following :

"select user from User user where user.customer.id=:param"

like image 20
Mac Avatar answered Dec 04 '22 17:12

Mac