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,它告诉我参数超出范围。 我究竟做错了什么?

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

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

你可能还想仔细检查一下你真正的意思是type like 'B'因为这可能不会像你想象的那样做。

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();