Hibernate SQLQuery - 按名称获取对象

时间:2014-09-15 20:22:59

标签: java spring hibernate sessionfactory

我有一种方法可以通过“id”获取Category,我需要一个类似的方法来通过“name”获取Category。我使用Hibernate完成了这些方法。如何修复我的第二种方法以按名称获取类别? 我的源代码如下:

// It works
@Override
public Category getById(int id) {
    return (Category) sessionFactory.getCurrentSession().get(Category.class, id);
}

// It doesn't works
@Override
public Category getByName(String name) {
    return (Category) sessionFactory.getCurrentSession().
        createSQLQuery("SELECT FROM Category WHERE name="+name);
}

第二种方法出现此错误:

  

java.lang.ClassCastException:org.hibernate.impl.SQLQueryImpl不能   被投射到com.sedae.model.Category

这些是我的控制器。

@RequestMapping(value = "/getCategoryById/{id}")
public String getCategoryById(Model model, @PathVariable ("id") int id){
    model.addAttribute("category", categoryService.getById(id));
    return "/getCategoryById";
}

@RequestMapping(value = "/getCategoryByName/{name}")
public String getCategoryByName(Model model, @PathVariable("name") String name){
    model.addAttribute("category", categoryService.getByName(name));
    return "/getCategoryByName";
}

先谢谢大家。

1 个答案:

答案 0 :(得分:5)

如果您确定表格中每个类别名称只有一个条目,那么您可以使用Query#uniqueResult

Query query= sessionFactory.getCurrentSession().
        createQuery("from Category where name=:name");
query.setParameter("name", name);
Category category = (Category) query.uniqueResult();

确保处理uniqueResult抛出的异常。