Hibernate SQL错误:1064,SQLState:42000

时间:2016-04-06 04:48:01

标签: java hibernate

我的hibernate查询就是这样。

@Override
    public List<Userdata> getUserDataWithUserType(String userName) {
        List<Userdata> africanContinents = getSession().createSQLQuery(
                "from userdata cont join cont.usertype ctry "
                + "where cont.userName = '" + userName + "")
                .list();
        return africanContinents;
    }

但是当我的方法运行时,系统会给出错误信息

SQL Error: 1064, SQLState: 42000
ERROR:   You have an error in your SQL syntax;

我如何解决这个问题。 ***上面的代码用于创建两个表的连接操作。 ** myuserdata类是

@Entity
@Table(name="userdata")
public class Userdata  implements java.io.Serializable {
     private Integer userId;
     private Usertype usertype;
     private String firstName;
     private String lastName;
     private String userName;
     private String passWord;
     private String email;
     private String tleNo;
     private Date birthDay;
     private String department;
     private String image;
     private Boolean checkBy;

    public Userdata() {
    }


    public Userdata(Usertype usertype) {
        this.usertype = usertype;
    }


     //get set method
}

2 个答案:

答案 0 :(得分:1)

使用createSQLQuery()时,您正在底层数据库上执行原始SQL查询。但是,您使用的语法似乎是HQL,而不是原始SQL,因此我猜您打算使用createQuery()而不是createSQLQuery()。试试这段代码:

@Override
public List<Userdata> getUserDataWithUserType(String userName) {
    List<Userdata> africanContinents = getSession().createQuery(
        "from Userdata cont where cont.userName = :userName")
       .setParameter("userName", userName)
       .list();
    return africanContinents;
}

您会注意到我还使用setParameterWHERE子句中设置参数。这是针对SQL注入的预防措施,您应该查看相关文档。

答案 1 :(得分:0)

  

试试这个。解释将很快添加。

Query q = getSession().createQuery(
                "from userdata cont cont.usertype where cont.userName =: userName");
q.setParameter("userName","kumar");  

 List<Userdata> africanContinents  = query.list();