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();
- 通过JPA注释更改类层次结构分支中的inheritance策略
- 使用Hibernate 4的Integrator模式和Spring的dependency injection
- Hibernate:在类上使用mappedBy扩展另一个注释为JoinedSubclass的类?
- Hibernate @OneToMany抛出MySQLSyntaxErrorException:您的SQL语法中有错误
- 一个事务中的Hibernate和JDBC
- Spring – slf4J:如何自动记录错误和exception?
- Spring Boot:Hibernate和Flyway启动顺序
- Hibernate中的三元(和n-ary)关系
- 删除jsf数据表中的行