如题

解决方案 »

  1.   

    select tablename.CURRENT_TEMPERATURE_C as {table.CURRENT_TEMPERATURE_C},tablename.WIND_DIRECTION_ENGLISH as {table.WIND_DIRECTION_ENGLISH},tablename.FORECAST_CHINESE as {table.FORECAST_CHINESE},tablename.FORECAST_ENGLISH as {table.FORECAST_ENGLISH},tablename.WEATHER_CHINESE as {table.WEATHER_CHINESE},tablename.WEATHER_ENGLISH as {table.WEATHER_ENGLISH} from SWeather tablename where CITY_IATA=PEK 
    我参考书这样写的。提示以下错误:
    org.hibernate.QueryException: No column name found for property [CURRENT_TEMPERATURE_C] [select tablename.CURRENT_TEMPERATURE_C as {table.CURRENT_TEMPERATURE_C},tablename.WIND_DIRECTION_ENGLISH as {table.WIND_DIRECTION_ENGLISH},tablename.FORECAST_CHINESE as {table.FORECAST_CHINESE},tablename.FORECAST_ENGLISH as {table.FORECAST_ENGLISH},tablename.WEATHER_CHINESE as {table.WEATHER_CHINESE},tablename.WEATHER_ENGLISH as {table.WEATHER_ENGLISH} from SWeather tablename where CITY_IATA=PEK]
    at org.hibernate.loader.custom.SQLQueryParser.resolveProperties(SQLQueryParser.java:195)
    at org.hibernate.loader.custom.SQLQueryParser.substituteBrackets(SQLQueryParser.java:131)
    at org.hibernate.loader.custom.SQLQueryParser.process(SQLQueryParser.java:76)
    at org.hibernate.loader.custom.SQLCustomQuery.<init>(SQLCustomQuery.java:160)
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:144)
    at com.infoair.giis.hibernate.business.ResultCollection.ResultCollection(ResultCollection.java:26)
    at org.apache.jsp.Inquire.QueryWeatherResult1_jsp._jspService(QueryWeatherResult1_jsp.java:157)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:595)
      

  2.   

    在hibernate中不可以执行SQL么?有谁可以指点一下啊!谢谢了
      

  3.   

    pxjianke(一无所有-光明唧) :怎么用呢?因为在hibernate中的select 后的列名都是经映射以后的,而我要的select 后的列名是动态的根据具体情况从数据库表中直接取出的列名.因为不是固定那些所以没法确定映射后的列名。才想直接执行sql
      

  4.   

    Hibernate使用的是HQL语句,所操作的对象是映射过来的java POJO对象,所以你检查一下你的语句里面的表名和字段名是否对应的是java对象和字段的名字,而且大小写区分的
      

  5.   

    我找出上面出错的问题所在了。现在我想在hibernate中不使用其映射以后的东西。它能否执行sql呢?
      

  6.   

    用单独一个jdbc连接做这个需求吧,不过模式不好
    个人以为像这种复杂的动态sql语句,hibernate不太适合
      

  7.   

    就是说hibernate必须在知道了映射对象名之后才能写hql。它不能脱离映射对象完全执行SQL,是这样么?
      

  8.   

    我看了深入浅出的hibernate中有关于执行SQL的,但是也需要知道映射后列名以及表名。无法执行脱离映射对象直接使用数据库中列名和表名的SQL。
      

  9.   

    hibernate高手请进来帮我一下!
      

  10.   

    晕,直接回调JDBC接口嘛!会spring吧?spring+hibernate回调的代码给你:public RowSetDynaClass findBySQL(String queryString, Object[] params) {
    Session session = this.getHibernateTemplate().getSessionFactory()
    .openSession();
    Connection conn = session.connection();
    RowSetDynaClass result = null;
    try {
    PreparedStatement ps = conn.prepareStatement(queryString);
    for (int i = 0; i < params.length; i++) {
    Object param = params[i];
    ps.setObject(i + 1, param);
    }
    ResultSet rs = ps.executeQuery();
    result = new RowSetDynaClass(rs);
    rs.close();
    ps.close();
    session.close(); } catch (SQLException e) {
    logger.error("Method:findBySQL(String queryString, Object[] params)", e);
    } return result;
    }RowSetDynaClass是org.apache.commons.beanutils下的一个类,自己从网上下就是了
      

  11.   

    xyzangrui():我不会spring,而且hibernate也是刚刚才接触。
      

  12.   

    不会spring没关系。
    Connection conn = session.connection();
    这就获得一个Connection剩下全是jdbc了,没问题吧?
      

  13.   

    请问:Object[] params,这个参数是做什么用?
      

  14.   

    你的问题不是在hibernate中如何使用SQL语句么?我理解的是如何在hibernate中调用原生的sql。是这个意思么?如果是的话,那一个方法就是回调Jdbc接口。当然还有别的方法。你可以看一下hibernate3中文文档的16章,里面讲得很清楚。Object[] params 里面传的都是参数,select * from Cust where ID=?把参数封装成对象数组
      

  15.   

    xyzangrui() :是你说的那样。如何在hibernate中调用原生的sql。
    还想问您一个问题:hibernate如何取动态的列名。就是select后的列名是动态传递过来的。hibernate如何在不知道具体列名的情况下取出其值。
      

  16.   

    select * from
    不就得了!
      

  17.   

    我不是说怎么写select语句,而是要将列对应的值取出来显示在页面中。在jdbc中如果不知道列名可以用rs.getString(i);来取值,在hibernate中如何取呢/
      

  18.   

    hibernate只有在适合的地方使用,没必要什么地方都非得用它.有时用jdbc会更加高效和简洁.
      

  19.   

    3.0好象有直接写入SQL的方法,使用原生的SQL而不是HQL
      

  20.   

    我就是想问该如何用啊?不是要写HQL。是不是即使使用SQL也要涉及到映射对象?
      

  21.   

    我的SQL语句是拼起来的,动态的。select后的列名和from后的表名是对应数据库中原生的列名和表名。可以在hibernate中直接用这样的SQL语句,而不涉及到映射对象?
    能否给个例子?
      

  22.   

    session.createSQLQuery()
    有问题最好先查文档,不行再提问题 :)
      

  23.   

    至于返回的结果,参看Reference Chapter 16.
      

  24.   

    session.createSQLQuery()
    得需要映射对象的。session.createSQLQuery(sql,"表别名",表映射对象名.class)。