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