参数值[2]与预期类型[com.cityBike.app.model.User]不匹配

1 java hibernate jpa createquery

我收到了错误

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

下面是我的代码片段,我该如何解决这个问题?

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; 
    ... 
Run Code Online (Sandbox Code Playgroud)

文件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;
...
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

wer*_*ero 6

Rent.user_id因此,当您将a传递int给查询时,类型为用户

from Rent a where a.user_id = :user_id
Run Code Online (Sandbox Code Playgroud)

你是一个比较Userint.

相反,你需要写

from Rent a where a.user_id.id = :user_id
Run Code Online (Sandbox Code Playgroud)

我建议重命名Rent.user_idRent.user避免这种错误.