我收到以下错误
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)
以下是我的代码段,如何解决此问题?
文件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
@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
@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。请指导和协助。
Rent.user_id因此,当您将a传递int给查询时,类型为用户
Rent.user_id
int
from Rent a where a.user_id = :user_id
您正在将a User与进行比较int。
User
相反,你需要写
from Rent a where a.user_id.id = :user_id
我建议重命名Rent.user_id以Rent.user避免这种错误。
Rent.user