0

我需要帮助。我正在尝试通过播放框架中的 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]

有人能帮助我吗!任何帮助我将不胜感激!

谢谢

4

3 回答 3

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();

也就是说,如果您的用户实体被命名为用户,它可能是用户。

于 2012-06-21T14:09:16.360 回答
3

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

"select * from USERS where USERNAME=? and PASSWORD=?"
于 2012-06-21T15:11:55.677 回答
0

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

于 2015-01-25T14:57:20.510 回答