我有一种方法可以通过“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";
}
先谢谢大家。
答案 0 :(得分:5)
如果您确定表格中每个类别名称只有一个条目,那么您可以使用Query#uniqueResult:
Query query= sessionFactory.getCurrentSession().
createQuery("from Category where name=:name");
query.setParameter("name", name);
Category category = (Category) query.uniqueResult();
确保处理uniqueResult抛出的异常。