我在简单的select语句中得到SQL语法异常这里是我的产品类
@Entity
public class products {
private String Code,Name,Description;
private double Price;
@Id
public String getCode() {
return Code;
}
public void setCode(String code) {
Code = code;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public double getPrice() {
return Price;
}
public void setPrice(double price) {
Price = price;
}
}
这是我正在执行的查询
public products getProductDescription(String Code)
{
setSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();
String query = "from products p where p.code=:code";
Query q = session.createQuery(query);
q.setString("code", Code);
System.out.println(query);
products pr = (products)session.createQuery(query);
session.close();
return pr;
}
所有表格存在且来自产品"查询工作完美,但当我在这里插入where子句时,它不起作用
UPDATE1
public products getProductDescription(String Code)
{
setSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();
String query = "from products p where p.code=:code";
Query q = session.createQuery(query);
q.setString("code", Code);
System.out.println(query);
products pr = (products)session.createQuery(q);
session.close();
return pr;
}
products pr = (products)session.createQuery(q);
处的错误说函数createQuery不支持Query类型的参数。 Quickfix告诉我将其更改为字符串
答案 0 :(得分:1)
请注意,您应该将属性名称更改为小写字母,例如code
而不是Code
。当您使用大量框架时,这是必需的。
重命名属性后,请尝试以下操作 -
String query = "from products p where p.code=" + Code;
另外,正如@Luiggi在评论中建议的那样,总是使用参数而不是连接字符串。 e.g。
String query = "from products p where p.code = :code";
另一个建议是让你的班级名字以大写字母开头。例如Product
代替products
。
最后,您的查询看起来像 -
String query = "from Product p where p.code = :code";
Query q = session.createQuery(query);
q.setString("code", code);
<强>更新强>
public products getProductDescription(String Code)
{
setSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();
String query = "from products p where p.code=:code";
Query q = session.createQuery(query); //query is already created here
q.setString("code", Code);
System.out.println(query);
//delete the line below
//products pr = (products)session.createQuery(q);
//add the lines below
List<products> l = (List<products>) q.list();
products pr = null;
if(!l.isEmpty()) {
pr = l.get(0);
}
session.close();
return pr;
}