JPA查询异常
我有一个使用 EntityManager 构建的查询:
Query q = em
.createQuery("SELECT * FROM :table WHERE username = :username AND password = MD5(:password)")
.setParameter("table", User.class.getName())
.setParameter("username", txtLogin.getText())
.setParameter("password", passPassword.getPassword())
;
User user = (User) q.getSingleResult();
但出现异常:
线程“AWT-EventQueue-0”中出现异常 java.lang.IllegalArgumentException:一个 创建时发生异常 在 EntityManager 中查询:
例外 描述:解析语法错误 查询 [SELECT * FROM :table WHERE 用户名 = :用户名和密码 = MD5(:密码)],第 1 行,第 7 列: 意外标记 [*]。
如何修复它?
查询中不能使用*
吗?
I have a query builded with EntityManager
:
Query q = em
.createQuery("SELECT * FROM :table WHERE username = :username AND password = MD5(:password)")
.setParameter("table", User.class.getName())
.setParameter("username", txtLogin.getText())
.setParameter("password", passPassword.getPassword())
;
User user = (User) q.getSingleResult();
but I get an exception:
Exception in thread "AWT-EventQueue-0"
java.lang.IllegalArgumentException: An
exception occurred while creating a
query in EntityManager:
Exception
Description: Syntax error parsing the
query [SELECT * FROM :table WHERE
username = :username AND password =
MD5(:password)], line 1, column 7:
unexpected token [*].
How to fix it ?
Is it impossible to use *
in queries ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
JPQL 语法与 SQL 不同,您可以
代替
但这只是问题的一部分。
SELECT t FROM :table t
也不起作用,因为from
子句中不允许使用参数,而只能在where
子句中使用参数。因此,您必须这样做:此外,JPQL 中没有
MD5()
函数,因此要使用 MD5,您必须在 Java 代码中执行此操作,或者使用本机 SQL 查询。JPQL syntax is different from SQL, you do
instead of
But that's only part of your problem.
SELECT t FROM :table t
won't work either, as parameters are not allowed in thefrom
clause, but only in thewhere
clause. So you must do it something like this:Also, there is no
MD5()
function in JPQL, so to use MD5 you either have to do that in java code or use a native SQL query.是的,你不能像这样使用
*
。这是如何做到的。注意,即使 SELECT 也是可选的
,使用 SELECT 你可以这样做:
Yes you cannot use
*
like that.This is how to do it. Note even the SELECT is optional
With SELECT you can do like this: