[PersistenceException:org.hibernate.exception.SQLGrammarException:无法执行查询]

时间:2012-06-21 13:06:04

标签: sql playframework

我需要帮助。我试图通过播放框架中的sql语句选择数据库,但它给了我错误,我无法弄清楚线索在哪里。这是代码:

@Transactional
public static Users findByUsernameAndPassword(String username, String password){
String hash = DigestUtils.md5Hex(password);
Query q = JPA.em().createNativeQuery("select * from USERS where" + "USERNAME=? and PASSWORD=?").setParameter(1, username).setParameter(2, password);
List<Users> users = q.getResultList();
if(users.isEmpty()){
    return null;
} else{
    return users.get(0);

这是一条错误消息:

[PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query]
是的,有人可以帮助我!任何帮助,我将不胜感激!

感谢

3 个答案:

答案 0 :(得分:3)

您正在ORM(对象关系映射)查询中使用纯SQL。 JPA允许您使用对象及其属性构建查询,而不是数据库表。

TypedQuery<Users> q = JPA.em().createQuery("select * from Users where username= :username and password= :password", Users.class);
q.setparameter("username", username);
q.setparameter("password", hash);
List<Users> users = q.getResultList();

即如果您的用户实体名为Users,它可能是User。

答案 1 :(得分:3)

您在查询中缺少一些空格。试着解决这个问题:

"select * from USERS where USERNAME=? and PASSWORD=?"

答案 2 :(得分:0)

我也遇到了同样的问题,并从id中替换了@GeneratedValue,并手动输入了它正在运行的id的值。