JPA本机查询中的位置参数问题

时间:2010-11-10 12:53:40

标签: java sql hibernate jpa

我正在尝试:

String sql = "SELECT email FROM users WHERE (type like 'B') AND (username like '?1')";
List results = em.createNativeQuery(sql).setParameter(1, username).getResultList();

但是我得到了IllegalArgumentException,它告诉我参数超出界限。我做错了什么?

2 个答案:

答案 0 :(得分:8)

参数周围没有引号。试试这个:

String sql = "SELECT email FROM users WHERE (type like 'B') AND (username like ?1)";

您可能还想仔细检查一下您的确是type like 'B',因为这可能与您的想法无关。

答案 1 :(得分:2)

a)为什么要使用本机SQL进行这样的简单查询?使用JPQL b)为什么要使用,如果你不使用通配符?请改用=

String jpql =
  "SELECT u.email FROM users u WHERE (u.type = 'B') AND (u.username = '?1')";

List results = 
    em.createQuery(jpql)
      .setParameter(1, username)
      .getResultList();