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.");
    }
}

BookService.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"));
}

Book.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

エンティティ、マップされたフィールド、および関連付けを使用して、HQL 要求を予期するメソッドに、テーブルと列名を使用して SQL 要求を渡しています。SQL と HQL は 2 つの異なるクエリ言語です。

HQL クエリは

select count(book.id) from Book book

HQL について知らない場合は、ドキュメントを読む必要があります。HQL を知らずに Hibernate を使用することは、SQL を知らずに JDBC を使用するようなものです。

于 2013-01-21T20:34:09.620 に答える