我创建Query时遇到了Hibernate异常

时间:2018-02-18 19:50:08

标签: java model-view-controller controller

当我从数据库中获取所有列表ob书籍时,一切正常。我使用方法" public List listBooks()"在我的DAO课程中。但是当我尝试通过一些参数过滤书籍时抛出其他方法:" public List listBooksFiltered(String title,String author)" ,我有例外。

你有部分books.jsp文件:

books.jsp

你有@Controller的一部分

@RequestMapping(value = "books", method = RequestMethod.GET)
public String listBooks (Model model) {
    model.addAttribute("book", new Book());
    model.addAttribute("listBooks", this.bookService.listBooks());

    return "books";
}

@RequestMapping(value = "/books/filtering", method = RequestMethod.POST)
public String listBooksFiltered (@RequestParam("title") String title, @RequestParam("author") String author,  Model model) {

    model.addAttribute("book", new Book());
    model.addAttribute("listBooks", this.bookService.listBooksFiltered(title, author));

    return "books";
}

你有部分BookDaoImpl.class:

@Override
@SuppressWarnings("unchecked")
public List<Book> listBooks() {
    Session session = this.sessionFactory.getCurrentSession();
    List<Book> bookList = session.createQuery("from Book").list(); // special query for loading all objects Book.class

    for(Book book: bookList) {
        logger.info("Book list: " + book);
    }
    return bookList;
}

@Override
@SuppressWarnings("unchecked")
public List<Book> listBooksFiltered(String title, String author) {
    Session session = this.sessionFactory.getCurrentSession();

    Query query = session.createQuery("from Book where bookTitle = :paramTitle");
    query.setParameter("paramTitle", title);
    List<Book> bookList = query.list();

    for(Book book: bookList) {
        logger.info("Book list: " + book);
    }
    return bookList;
}

1 个答案:

答案 0 :(得分:0)

好的,我有一个解决方案!原因是:

我忘了在服务类方法中键入@Transactional注释,它位于控制器和Dao类之间。所以很可能Hibernate停止了对这种方法的计算。