我正在尝试:
String sql = "SELECT email FROM users WHERE (type like 'B') AND (username like '?1')";
List results = em.createNativeQuery(sql).setParameter(1, username).getResultList();
但是我得到了IllegalArgumentException,它告诉我参数超出界限。我做错了什么?
答案 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();