我的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
}
答案 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;
}
您会注意到我还使用setParameter
在WHERE
子句中设置参数。这是针对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();