Select语句的Hibernate SQL语法异常

时间:2014-05-11 15:12:04

标签: java eclipse hibernate

我在简单的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告诉我将其更改为字符串

1 个答案:

答案 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;
}