jpa创建查询方法

时间:2015-04-18 23:15:05

标签: java jpa

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;
}

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

  

java.lang.IllegalArgumentException:您试图为参数id设置类型类java的值,其中包含来自查询字符串的预期类型JPA.User从Creditcard u中选择u.cardNumber,其中u.userID = :ID

在我的数据库中,cardnumber存储为double,userid存储为int,所以我很困惑为什么程序告诉我需要发送jpa.user对象。

1 个答案:

答案 0 :(得分:0)

使用EntityManager#createQuery时,其中的String不是SQL而是JPQL。 userID类中的CreditCard映射元素的类型为User(另一个类),而不是您期望的用户ID。

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

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

为了确定这可能是解决您问题的JPQL查询,我们需要查看CreditCardUser类的设计。