0

我正在开发一个充分利用 Hibernate 的应用程序。但是昨天我想将数据库中的一列(评论日期)从 更改DateDateTime.

我有一个从数据库中检索所有评论并将它们显示在表格中的方法。但是,由于我更改了数据类型,这不再有效。

我应该怎么办?

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)

另请注意,我尝试将类中的commentDate类型从Date更改为(由 Hibernate 生成),但显示错误“找不到符号”。DateTimeComments

4

2 回答 2

0

我不认为

new CommentsHelper().getAllComments();

正在返回一个

List<Comments>

它返回一个非类型

List

你需要一个 .addEntity(Comments.class); 在您的休眠代码中。

session.createSQLQuery("SELECT * FROM Comments Order BY CommentDate")
    .addEntity(Comments.class).list();
于 2013-01-20T06:16:31.227 回答
0

DateTime是一个 jodatime 类(对吗?),休眠将无法将数据库时间戳映射到DateTime开箱即用。标准行为是休眠序列化对象(DateTimeis Serializable)并将其映射到数据库上的类似 blob 的结构。这可能不是你想要的。

但是有一个非常简单的解决方案:将jadira 用户类型添加到您的项目中(并添加一些休眠属性,如其文档中所述)。然后,您将直接将数据库时间戳映射到实体上的 jodatime 类。

于 2013-01-20T08:43:34.730 回答