Tôi có một phương thức để lấy Danh mục theo "id" của nó và tôi cần một phương thức tương tự để lấy Danh mục theo "tên" của nó. Tôi đã làm những phương pháp này bằng cách sử dụng Hibernate. Làm thế nào tôi có thể sửa chữa phương pháp thứ hai của tôi để có được một thể loại theo tên? mã nguồn của tôi là như sau:Hibernate SQLQuery - Nhận đối tượng theo tên
// 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);
}
Tôi có lỗi này với phương pháp thứ hai:
java.lang.ClassCastException: org.hibernate.impl.SQLQueryImpl không thể được đúc để com. sedae.model.Category
Đây là bộ điều khiển của tôi.
@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";
}
Cảm ơn trước mọi người.
Cảm ơn anh bạn! Một câu hỏi xin vui lòng. Giả sử tôi có hai loại (với các id khác nhau, rõ ràng) Làm thế nào tôi có thể có được một thể loại cụ thể bằng cách tránh lỗi "truy vấn không trả về một kết quả duy nhất: 2". ? – wilson
Trong trường hợp đó truy vấn trả về một danh sách, bạn có thể lặp qua danh sách và lấy đối tượng bạn muốn hoặc nếu bạn muốn bất kỳ một đối tượng nào có cùng tên danh mục thì bạn có thể sử dụng 'query.setMaxResults (1);', this trả về danh mục gặp phải đầu tiên với tên danh mục được chỉ định. – user3487063
@wilson, giải pháp có hiệu quả với bạn không? – user3487063