今天在用hibernate执行一个当表搜索的方法的时候报了个错。错误代码如下:
The column name creation_date_by_system is not valid.org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
at com.sml.eplatform.admin.dao.HelpFileDaoHibernate.getHelpFile(HelpFileDaoHibernate.java:195)
at com.sml.eplatform.admin.service.AdminServiceImpl.getHelpFile(AdminServiceImpl.java:4308)
at com.sml.eplatform.admin.ui.action.SearchHelpFileAction.execute(SearchHelpFileAction.java:76)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.sml.eplatform.app.LoginSecurityFilter.doFilter(LoginSecurityFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.sml.eplatform.app.EncodingFilter.doFilter(EncodingFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The column name creation_date_by_system is not valid.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.findColumn(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getTimestamp(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)
at org.hibernate.type.CalendarType.get(CalendarType.java:30)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2096)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1380)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)
at org.hibernate.loader.Loader.getRow(Loader.java:1206)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
... 33 more
Sep 13, 2013 6:31:22 PM org.apache.catalina.core.ApplicationContext log
INFO: com.sml.eplatform.base.ApplicationServiceException: get HelpFile Error起因源于我在sql servre数据库中新加了一个字段。creation_date_by_system,然后再实体类中也增加了该字段的set和get方法。public Calendar getCreationDateBySystem() {
return creationDateBySystem;
}
public void setCreationDateBySystem(Calendar creationDateBySystem) {
this.creationDateBySystem = creationDateBySystem;
}
在映射文件中也配置了相对应的属性:<property name="creationDateBySystem" type="calendar">
    <column name="creation_date_by_system"/>
  </property>
<property name="lastUpdatedDateBySystem" type="calendar">
    <column name="last_updated_date_by_system"/>
  </property>
在没有新加这个字段之前,该表中也有一个同样的datetime类型的字段。配置也是一样的。在没加这个字段之前是都可以查询得到结果的!加了这个字段就报了这个错了。 在网络上好像没找到对应的答案。有没有大神存在!hibernate

解决方案 »

  1.   

    从你的描述和代码来看,应该没有错
    我觉得你应该先检查下你这个列加到数据库里生效了没有
    比如你可以先用纯JDBC的方式去运行一个带新加那个column的Query
      

  2.   

    把hibernate的showsql打开,看看什么sql出错了
      

  3.   

    hibernate中没有Calendar类对应数据库的属性类型吧?改成用Date试试,是java.util.Date,不是java.sql.Date。
      

  4.   

    不好意思,这星期又点忙,所以忘记过来回复了。忘记说了,打印出来的sql在sql server 里面执行是完全没有问题的。可以得到我想要的结果!
      

  5.   

    已经生效了。因为我用在console上打印出来的sql 到数据库里面去执行,都可以找到我需要的数据。