JPA查询异常

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列:意外令牌[*].

怎么解决?

是不可能*在查询中使用?

Sea*_*oyd 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查询.