2013-01-19 36 views
0

我正在開發一個應用程序,它充分利用了Hibernate的功能。然而,昨天我想要將數據庫中的一列(註釋日期)從Date更改爲DateTime更改休眠數據類型

我有一個方法,它從數據庫中檢索所有註釋並將它們顯示在一個表中。但是,由於我改變了數據類型,這不再起作用。

我該怎麼辦?

List<Comments> cmts = new CommentsHelper().getAllComments(); 

    out.println("<table class=\"tableC\"><tr><th class=\"name\" >User</th><th class=\"date\">Date</th><th class=\"comment\">Comment</th></tr>"); 

    for (Comments c : cmts) 
    { 

錯誤出現在for循環中。

這裏是堆棧跟蹤:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
root cause 

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to mediatek.Comments 
    org.apache.jsp.comments_jsp._jspService(comments_jsp.java:269) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

也請注意我試圖從DatecommentDate類型更改爲DateTimeComments類(由Hibernate生成),但出現錯誤「無法找到符號」顯示。

+0

你的代碼是否完整? 「(評論c:cmts)」片段 – Grubhart

回答

0

我不認爲

new CommentsHelper().getAllComments(); 

返回一個

List<Comments> 

它返回一個非類型

List 

你需要一個.addEntity(Comments.class);在你的Hibernate代碼中。

session.createSQLQuery("SELECT * FROM Comments Order BY CommentDate") 
    .addEntity(Comments.class).list(); 
+0

'公開列表 getAllComments() { 列表評論=空; org.hibernate.Transaction tx = session.beginTransaction(); comments = session.createSQLQuery(「SELECT * FROM Comments Order BY CommentDate」)。list(); if(comments.size()> 0) { 返回評論; } return null; ' }' – erbsoftware

+0

您需要一個.addEntity(Comments.class);在你的Hibernate代碼中。 (「SELECT * FROM Comments Order BY CommentDate」)。addEntity(Comments.class).list(); – stevedbrown

0

DateTime是jodatime類(右?)和休眠就不能到數據庫時間戳DateTime映射開箱。標準的行爲是休眠序列化對象(DateTimeSerializable)並將其映射到數據庫上的blob類似結構。這可能不是你想要的。

但有一個相當簡單的解決方案:將jadira usertypes添加到您的項目(並添加一些休眠屬性,如他們的文檔中所述)。然後,您將有一個從數據庫時間戳到實體上的jodatime類的直接映射。