hsz*_*hsz 2 java mysql orm jpa jpql
我有一个建立的查询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();
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:
线程"AWT-EventQueue-0"中的异常java.lang.IllegalArgumentException:在EntityManager中创建查询时发生
异常:异常描述:解析查询时出现语法错误[SELECT*FROM:table WHERE username =:username AND password = MD5( :密码)],第1行,第7列:意外令牌[*].
怎么解决?
是不可能*在查询中使用?
您可以使用JPQL语法与SQL不同
Select T from Thingy T
Run Code Online (Sandbox Code Playgroud)
代替
Select * from Thingy
Run Code Online (Sandbox Code Playgroud)
但这只是你问题的一部分.SELECT t FROM :table t也不会工作,因为from子句中不允许使用参数,但只能在where子句中使用.所以你必须这样做:
Query q = em
.createQuery("SELECT u FROM " + User.class.getName()
+ "u WHERE username = :username AND password = MD5(:password)")
.setParameter("username", txtLogin.getText())
.setParameter("password", passPassword.getPassword())
;
Run Code Online (Sandbox Code Playgroud)
此外,MD5()JPQL中没有任何功能,因此要使用MD5,您必须在java代码中执行此操作或使用本机SQL查询.