0

我使用 Spring MVC 3、Hibernate 和 Ext Js 4 创建了一个应用程序。问题是当我启动应用程序时,没有从数据库中读取数据。

BookController.java:

@Controller
public class BookController  {

private BookService bookService;

@RequestMapping(value="/books/view.action")
public @ResponseBody Map<String,? extends Object> view(@RequestParam int start, @RequestParam int limit) throws Exception {

    try{

        List<Book> books = bookService.getBookList(start,limit);

        int total = bookService.getTotalBooks();

        return ExtJSReturn.mapOK(books, total);

    } catch (Exception e) {

        return ExtJSReturn.mapError("Error retrieving books from database.");
    }
}

图书服务.java:

@Service
public class BookService {

private BookDAO bookDAO;

/**
 * Get all books
 * @return
 */
@Transactional(readOnly=true)
public List<Book> getBookList(int start, int limit){

    return bookDAO.getBooks(start, limit);
}

    public int getTotalBooks(){

    return bookDAO.getTotalBooks();
}

BookDAO.java:

    @SuppressWarnings("unchecked")
public List<Book> getBooks(int start, int limit) {

    DetachedCriteria criteria = DetachedCriteria.forClass(Book.class);

    return hibernateTemplate.findByCriteria(criteria, start, limit);
}

    public int getTotalBooks(){
    return DataAccessUtils.intResult(hibernateTemplate.find("SELECT COUNT(*) FROM books"));
}

书.java:

@JsonAutoDetect
@Entity
@Table(name="books")
public class Book {

@Id
@GeneratedValue
@Column(name="id")
private int id;

@Column(name="title", nullable=false)
private String title;

@Column(name="author", nullable=false)
private String author;

@Column(name="publisher", nullable=false)
private String publisher;

@Column(name="isbn", nullable=false)
private String isbn;

@Column(name="pages", nullable=false)
private int pages;

@Column(name="category", nullable=false)
private String category;

@Column(name="qty", nullable=false)
private int qty;

/**
 * @return the title
 */
public String getTitle() {
    return title;
}

/**
 * @param title the title to set
 */
public void setTitle(String title) {
    this.title = title;
}

/**
 * @return the author
 */
public String getAuthor() {
    return author;
}

/**
 * @param author the author to set
 */
public void setAuthor(String author) {
    this.author = author;
}

/**
 * @return the publisher
 */
public String getPublisher() {
    return publisher;
}

/**
 * @param publisher the publisher to set
 */
public void setPublisher(String publisher) {
    this.publisher = publisher;
}

/**
 * @return the isbn
 */
public String getIsbn() {
    return isbn;
}

/**
 * @param isbn the isbn to set
 */
public void setIsbn(String isbn) {
    this.isbn = isbn;
}

/**
 * @return the pages
 */
public int getPages() {
    return pages;
}

/**
 * @param pages the pages to set
 */
public void setPages(int pages) {
    this.pages = pages;
}

/**
 * @return the category
 */
public String getCategory() {
    return category;
}

/**
 * @param category the category to set
 */
public void setCategory(String category) {
    this.category = category;
}

/**
 * @return the qty
 */
public int getQty() {
    return qty;
}

/**
 * @param qty the qty to set
 */
public void setQty(int qty) {
    this.qty = qty;
}

/**
 * @return the id
 */
public int getId() {
    return id;
}

/**
 * @param id the id to set
 */
public void setId(int id) {
    this.id = id;
}


}

ExtJsReturn.java:

@Component
public class ExtJSReturn {

/**
 * Generates modelMap to return in the modelAndView
 * @param books
 * @return
 */
public static Map<String,Object> mapOK(List<Book> books){

    Map<String,Object> modelMap = new HashMap<String,Object>(3);
    modelMap.put("total", books.size());
    modelMap.put("data", books);
    modelMap.put("success", true);

    return modelMap;
}

/**
 * Generates modelMap to return in the modelAndView
 * @param books
 * @return
 */
public static Map<String,Object> mapOK(List<Book> books, int total){

    Map<String,Object> modelMap = new HashMap<String,Object>(3);
    modelMap.put("total", total);
    modelMap.put("data", books);
    modelMap.put("success", true);

    return modelMap;
}

/**
 * Generates modelMap to return in the modelAndView in case
 * of exception
 * @param msg message
 * @return
 */
public static Map<String,Object> mapError(String msg){

    Map<String,Object> modelMap = new HashMap<String,Object>(2);
    modelMap.put("message", msg);
    modelMap.put("success", false);

    return modelMap;
} 
}

控制器引发错误:从数据库中检索书籍时出错。你知道可能是什么问题吗?请参阅此处的控制台输出: http: //pastebin.com/jMQKS31P

固定的!!!

https://stackoverflow.com/a/14447201/1564840

4

1 回答 1

1

您正在使用表和列名将 SQL 请求传递给需要 HQL 请求的方法,使用实体、映射字段和关联。SQL 和 HQL 是两种不同的查询语言。

HQL 查询应该是

select count(book.id) from Book book

If you don't know about HQL, then you really need to read the documentation. Using Hibernate without knowing HQL is like using JDBC without knowing SQL.

于 2013-01-21T20:34:09.620 回答