我的 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 注入(inject)的预防措施,您应该查看相关文档。
关于java - hibernate SQL 错误 : 1064, SQLState: 42000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441743/