参数值[2]与预期的类型[com.cityBike.app.model.User不匹配 [英] Parameter value [2] did not match expected type [com.cityBike.app.model.User

查看:96
本文介绍了参数值[2]与预期的类型[com.cityBike.app.model.User不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到错误消息

java.lang.IllegalArgumentException:参数值[2]与预期的类型[com.cityBike.app.model.User(n/a)]不匹配 在org.hibernate.jpa.spi.BaseQueryImpl.validateBinding(BaseQueryImpl.java:885) 在org.hibernate.jpa.internal.QueryImpl.access $ 000(QueryImpl.java:80) 在org.hibernate.jpa.internal.QueryImpl $ ParameterRegistrationImpl.bindValue(QueryImpl.java:248) 在org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:631) 在org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:180) 在org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:49) 在com.cityBike.app.service.RentService.getAllByUser(RentService.java:22)

java.lang.IllegalArgumentException: Parameter value [2] did not match expected type [com.cityBike.app.model.User (n/a)] at org.hibernate.jpa.spi.BaseQueryImpl.validateBinding(BaseQueryImpl.java:885) at org.hibernate.jpa.internal.QueryImpl.access$000(QueryImpl.java:80) at org.hibernate.jpa.internal.QueryImpl$ParameterRegistrationImpl.bindValue(QueryImpl.java:248) at org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:631) at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:180) at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:49) at com.cityBike.app.service.RentService.getAllByUser(RentService.java:22)

下面是我的代码段,如何解决此问题?

Below is my code snippet, how can I fix this issue?

Rent.java文件

File Rent.java

@Entity
@Table(name="Rent")
public class Rent implements Serializable {

    @Id  
    @GeneratedValue(strategy=GenerationType.AUTO)  
    @Column(name = "id")  
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "start_id")
    private Station start_id;

    @ManyToOne
    @JoinColumn(name = "meta_id")
    private Station meta_id;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user_id; 
    ... 

文件User.java

File User.java

@Entity  
@Table(name="Users")
public class User implements Serializable {

    @Id  
    @GeneratedValue(strategy=GenerationType.AUTO)  
    @Column(name = "id")  
    private Integer id;

    @Column(name = "login")
    private String login;
...

RentService.java文件

File RentService.java

@Service
public class RentService {

    @PersistenceContext
    private EntityManager em;

    @Transactional
    public List<Rent> getAllByUser(int user_id){
            System.out.println(user_id);
            List<Rent> result = em.createQuery("from Rent a where a.user_id = :user_id", Rent.class).setParameter("user_id", user_id).getResultList();
            System.out.println(result);
        return result;
    }
}

我应该添加在控制台上显示的"user_id"是正确的,因为它具有这样的数值ex. 2或3. 请指导和协助.

I should add that "user_id" when displayed on the console is correct as it has such a numerical value ex. 2 or 3. Please guidance and assistance.

推荐答案

因此,当您将int传递给查询时,Rent.user_id的类型是User

The Type of Rent.user_id is User therefore when you pass a int to the query

from Rent a where a.user_id = :user_id

您正在将Userint进行比较.

相反,您需要编写

from Rent a where a.user_id.id = :user_id

我建议将Rent.user_id重命名为Rent.user,以避免此类错误.

I would recommend to rename Rent.user_id to Rent.user to avoid this kind of error.

这篇关于参数值[2]与预期的类型[com.cityBike.app.model.User不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆