我正在开发一个使用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循环中。
这是stacktrace:
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
类更改为DateTime
类(由Hibernate生成),但错误“无法找到符号“显示。
答案 0 :(得分:0)
我不认为
new CommentsHelper().getAllComments();
正在返回
List<Comments>
它正在返回一个非类型
List
你需要一个.addEntity(Comments.class);在你的Hibernate代码中。
session.createSQLQuery("SELECT * FROM Comments Order BY CommentDate")
.addEntity(Comments.class).list();
答案 1 :(得分:0)
DateTime
是一个jodatime类(对吧?),而hibernate将无法将数据库时间戳映射到DateTime
开箱即用。标准行为是hibernate序列化对象(DateTime
是Serializable
)并将其映射到数据库上的blob结构。这可能不是你想要的。
但是有一个非常简单的解决方案:将jadira usertypes添加到项目中(并添加一些hibernate属性,如文档中所述)。然后,您将直接映射数据库时间戳到实体上的jodatime类。