休眠SQL错误:1064,SQL状态:42000



我的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
}

当您使用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;
}

您会注意到,我还使用了setParameter来设置WHERE子句中的参数。这是针对SQL注入的预防措施,您应该查看有关此方面的文档。

试试这个。稍后将添加说明。

Query q = getSession().createQuery(
                "from userdata cont cont.usertype where cont.userName =: userName");
q.setParameter("userName","kumar");  
 List<Userdata> africanContinents  = query.list();

我也收到了这个错误,问题是,我们使用了名称"键";作为列名。所以我们所做的是在我们的实体类中,我们使用了"`"用列名";键";像这个

@Column(name = "`key`")
private String  key;

最新更新