在dao 里public List findByTitles(String title){
String hql="from News as news where news.title like'%"+title+"%'";
List list=getHibernateTemplate().find(hql);
return list;
}用这个方法是没问题的,我想用sql语句实现.用public List findByTitles(String title){
String sql="select * from  news where title like'%"+title+"%'";
Session session=getSession();
Transaction tx=session.beginTransaction();
Query qu=session.createSQLQuery(sql);
tx.commit();
List list=qu.list();
return list;
}方法时报错java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'news' 无效。
News.hbm.xml:
<hibernate-mapping>
   <class name="org.imm.model.News" catalog="news" table="news" schema="dbo">
   <id name="newsid" type="java.lang.Integer">
   <column name="newid" ></column>
   <generator class="native"></generator>
   </id>
   <property name="title" type="java.lang.String">
   <column name="title" length="50"></column>
   </property>
   <property name="content" type="java.lang.String">
   <column name="content" length="50"></column>
   </property>
   </class>
</hibernate-mapping>
请问怎么解决?

解决方案 »

  1.   

        public List getUserList(){
            //调用模板的execute方法,参数是实现了HibernateCallback接口的匿名类,
            return (List) this.execute(new HibernateCallback(){
                //重写其doInHibernate方法返回一个object对象,
                public Object doInHibernate(Session session)
                        throws HibernateException, SQLException {
                    //创建query对象
                    Query query=session.createSQLQuery("select * from table");
                    //返回其执行了分布方法的list
                    return query.list();                
                }            
            });        
        }
      

  2.   

    可以参考一下/*根据库房Id和储位编码查询货物信息*/
    public List findGoodsByWarehouseSlotCode(String warehouseId,String slotCode){
     log.debug("finding WmsStockSlot instance with property:warehouseId " + warehouseId 
                + ", stockCode: " + slotCode);
          try {
             String queryString = "SELECT * FROM WMS_STOCK_SLOT ss,WMS_BASE_GOODS  g,WMS_BASE_GOODS_STATUS s WHERE ss.STOCK_GOODS_ID=g.GOODS_ID AND ss.STOCK_GOODS_STATUS=S.GOODS_STATUS_ID AND ss.STOCK_WAREHOUSE_ID=? AND ss.STOCK_SLOT_CODE=?";          
             Query queryObject = getSession().createSQLQuery(queryString).addEntity("stockSlot",WmsStockSlot.class).addEntity("goods",WmsBaseGoods.class).addEntity("goodsStatus",WmsBaseGoodsStatus.class);
     queryObject.setParameter(0, warehouseId);
     queryObject.setParameter(1, slotCode);
     return queryObject.list();
          } catch (RuntimeException re) {
             log.error("find by property name failed", re);
             throw re;
          }
    }
      

  3.   

    数据库发生了异常,你的sql语句有问题
    String sql="form News n where n.title like'%"+title+"%'";
    还有 别忘了关闭事务和session 
      

  4.   

    一般做Hibernate查询时不需要开启Transactionpublic List findByTitles(String title){ 
    String sql="select * from news where title like'%"+title+"%'"; 
    Session session=getSession(); 
    Transaction tx=session.beginTransaction(); 
    Query qu=session.createSQLQuery(sql); 
    tx.commit(); //---放到后面去
    List list=qu.list(); 
    //tx.commit(); --放这里
    return list; 
    }算了,我在写一遍
             public List findByTitles(String title){
    Session se= getSession();
    List list=new ArrayList();
    String sql="select * from news where title like '%"+title+"%'";
    try{
    Query qu=session.createSQLQuery(sql);
    list=qu.list();
    }catch(Exception e){
    e.printStackTrace();
    }finally{
    se.close();//must close
    return list;
    }
    }
      

  5.   

    在啰唆一句,要养成良好的代码习惯
    做到有始有终
    打开的东西给它关闭掉
    Session必须的关,要不然运行个几十次,你电脑就不动了
    哈哈
      

  6.   

    select * from  news where title like'%"+title+"%'"; hibernate应该不支持 * from的查询
      

  7.   

    把你表里的属性写出来或直接
    from  news where title like'%"+title+"%'"; 
      

  8.   

    dbo.news我也用过,报错java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'dbo.news' 无效。 我觉得就是找不到news这个表,我的数据库是news,里面的一个表也叫news.用hql是没问题的,我想用sql实现下.
      

  9.   

    最外层的查询 hibernate是不支持select * 的 必须用from  如果是里面嵌套的子查询可以用select
    例如:
    from CourseCatalog c where c.courseCatalogId in (select cc.courseCatalog.courseCatalogId from CourseCatalogPrivilege cc where cc.user.userId=:userId )
      

  10.   

    hibernate   不需要你  select * 直接from..而且 from  后面跟的不是表名  是对象名!   你的 news  头字母应该大写  
      

  11.   

    楼上说的我已经会
    就我我帖出来的第一种方法,用hql查
    但现在我想用纯sql查
    所以才问的
      

  12.   

    同意楼上的!! createSQLQuery(sql);
    //加载实体对象
    Query query= sessss.createSQLQuery("select{cat.*}fromcatscat").addEntity("cat",Cat.class).list(); //条件是cat 返回值集合query属于SQL条件查询。你可以用BQC来完成条件查询 速度不次于SQL语句!!你使用的SQL语句可以配置在new.hbm.xml
    <sql-query name = " persons " >
     < return alias = " person "  class = " eg.Person " />
    Select person.NAME AS {person.name},person.AGE AS {person.age},person.SEX AS {person.sex} FROM PERSON person Where person.NAME LIKE :namePattern
    </sql-query>
    List people = sess.getNamedQuery( " persons " ).setString( " namePattern " , namePattern)
    .setMaxResults( 50 )
    .list();
      

  13.   

     public List findByTitles(String title){ 
    Session se= getSession(); 
    List list=new ArrayList(); 
    String sql="select * from News n where n.title like '%"+title+"%'"; 
    try{ 
    Query qu=session.createSQLQuery(sql); 
    list=qu.list(); 
    }catch(Exception e){ 
    e.printStackTrace(); 
    }finally{ 
    se.close();//must close 
    return list; 


    注意类名,报的是hibernate找不到类名而已。。不关SQL的事。
      

  14.   

    "select * from  dbo.news.news where title like'%"+title+"%'";   <class name="org.imm.model.News" catalog="news" table="news" schema="dbo"> 
    我记得schema和catalog都得加上 
      

  15.   

    兄弟 我没看你的hibernate.cfg.xml 所以我无法知道你连库的url是什么样的 不过我想在连库的时候应该没有写具体是哪个数据库吧?
    光加dbo是不够的 再把数据库名加上
      

  16.   

    public CstLinkman findByDel(String lkmCustName,String lkmName){
    Criteria criteria=getSession().createCriteria(类名.class);
    criteria.add(Expression.eq("lkmCustName", lkmCustName));
    criteria.add(Expression.eq("lkmName", lkmName));
    List<类名> list=criteria.list();
    if(list.size()==0){
    return null;
    }
    类名 cstLinkman=list.get(0);
    return cstLinkman;
    }
      

  17.   

    "select * from  dbo.news.news where title like'%"+title+"%'"; 
    这个我也试过了,报错java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'dbo.news.news' 无效。
      

  18.   

    List中的每个元素 此时都是一个对象数组 ,每个对象数组的每个元素对象与这个对象所对应的表的每个字段的值
    String sql="select * from  news where title like'%"+title+"%'"; 
    Session session=getSession(); 
    Transaction tx=session.beginTransaction(); 
    Query qu=session.createSQLQuery(sql); 
    List list=qu.list();  for(Iterator iter = list.iterator(); iter.hasNext();){
    Object [] obj = (Object[])iter.next();
    <!-- obj[0],obj[1],obj[2],分别代表这个表的前三个字段-->
    System.out.println(obj[0] + "  " + obj[1] + "  " +obj[2]);

    }这样遍历一下看看会会不错 反正我的电脑没出毛病