Java jpa创建查询方法

Java jpa创建查询方法,java,jpa,Java,Jpa,这是我获取所有用户信用卡的代码。 这是错误消息 java.lang.IllegalArgumentException:您试图为参数id设置一个类型为class java.lang.Integer的值,参数id的预期类型为class JPA。用户从查询字符串中选择u.cardNumber from Creditcard u,其中u.userID=:id 在我的数据库中,cardnumber存储为double,userid存储为int,因此我不明白为什么程序告诉我需要发送jpa.user对象。使用E

这是我获取所有用户信用卡的代码。 这是错误消息

java.lang.IllegalArgumentException:您试图为参数id设置一个类型为class java.lang.Integer的值,参数id的预期类型为class JPA。用户从查询字符串中选择u.cardNumber from Creditcard u,其中u.userID=:id

在我的数据库中,cardnumber存储为double,userid存储为int,因此我不明白为什么程序告诉我需要发送jpa.user对象。

使用EntityManagercreateQuery时,其中的字符串不是SQL而是JPQL。CreditCard类中的userID映射元素的类型为User-other-class,而不是您期望的用户id

您正在寻找的JPQL查询可能是:

public List<Double> getAllCards(int a) {
    EntityManager em = emFactory.createEntityManager();

    Query query = em.createQuery("Select u.cardNumber from Creditcard u where u.userID= :id");
    query.setParameter("id", a);
    List<Double> result = query.getResultList();
    em.close();
    return result;
}
为了确定这是否是解决您问题的JPQL查询,我们需要查看CreditCard和用户类的设计

Select u.cardNumber from Creditcard u where u.userID.id = :id