2

のエラーが表示されます

java.lang.IllegalArgumentException: パラメーター値 [2] は、org.hibernate.jpa.spi.BaseQueryImpl.validateBinding(BaseQueryImpl.java:885) で予期されるタイプ [com.cityBike.app.model.User (n/a)] と一致しませんでした) 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) at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:180) at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:49) 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」は、このような数値があるため正しいことを追加する必要があります。2、3. ご指導、ご協力をお願いします。

4

2 に答える 2

12

TypeRent.user_idは User であるためint、クエリに a を渡すと

from Rent a where a.user_id = :user_id

と を比較しUserていintます。

代わりに、書く必要があります

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

この種のエラーを避けるために、名前Rent.user_idをに変更することをお勧めします。Rent.user

于 2016-01-17T12:07:23.523 に答える
0

このクエリを使用できます:-

user_idinRentクラスは int 型のオブジェクトではないため、 ID を使用してオブジェクトUserを取得する必要がありますUser

List<Rent> result = em.createQuery("from Rent a where a.user_id = :user_id", Rent.class).setParameter("user_id", em.getReference(User.class, user_id)).getResultList();

または、次のように書くこともできます:-

List<Rent> result = em.createQuery("from Rent a where a.user_id.id = :user_id",Rent.class).setParameter("user_id", user_id).getResultList();
于 2016-01-17T12:22:56.143 に答える