我需要帮助。我试图通过播放框架中的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]
是的,有人可以帮助我!任何帮助,我将不胜感激!
感谢
答案 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的值。