我用(List<Exchange>)getHibernateTemplate() .find("from Exchange"); }返回数据库的内容。 传到List<Exchange> ms里,然后用ms.size()可以得到正确的数据数目,但是每一条的数据内容都一样,也就是只读出了一条有用的数据,其他的数据读不出来,是为什么呢?

解决方案 »

  1.   

    在哪个的后面呢?我在ms后面和getHibernateTemplate() .find(),HibernateTemplate()后面都没这个
      

  2.   

    这个是我的Action里面的
    public String search()
    throws Exception
        {
    Map session = ActionContext.getContext().getSession();
    setTip("发布成功!!");
        setMs(exchangeService.search(keyword));
        System.out.println(ms.size());
        System.out.println(ms.get(0).getMessage());
        System.out.println(ms.get(1).getMessage());
        System.out.println(ms.get(2).getMessage());
        session.put("ms", ms);
    return SUCCESS;
         }这是Service里的
    public List<Exchange> search(String keyword) 
    {
    return exchangeDao.findByKeyword(keyword);
    }这时Dao层的
    public List<Exchange> findByKeyword(String key)
    {
    String keyword="%"+key+"%";
    return (List<Exchange>)getHibernateTemplate()
    .find("from Exchange p where p.message like ?" , keyword);
    }最后输出的内容都一样的是为什么?
      

  3.   


    hql解析出的sql是什么,你执行以下看看。
      

  4.   

    hql?这个怎么搞,我刚学不太懂
      

  5.   

    告诉你解决的办法,你首先去数据库看你原来的数据是不一样的。如果不是一样的,OK
    那问题一定是你的action写错了。
    在从action查找。我猜想是Exchange导致的。你把List<Exchange>的Exchange干掉应该没有
    问题了。别问我为什么。
      

  6.   


    那你就把你dao层,如何封装List<Exchange>的method给这位小兄弟看。
      

  7.   

    我的代码在6楼发了,刚才我试了把所有list<Exchange>都改成List了,还是不行
      

  8.   

    这时Dao层的
    public List<Exchange> findByKeyword(String key)
    {
    String keyword="%"+key+"%";
    return (List<Exchange>)getHibernateTemplate()
    .find("from Exchange p where p.message like ?" , keyword);
    }写成这样:
    return (List<Exchange>)getHibernateTemplate()
    .find("from Exchange p where p.message like '%"+key+"%'" , keyword);然后,控制台打印出sql。看sql是什么
      

  9.   

    打印出sql是什么?是指运行的时候控制台出现的东西吗?(新手请谅解)
      

  10.   

    不是,hibernate配置文件中,有个配置参数。show_sql = true之后,控制台可以打印出hql转换的sql的。
      

  11.   

    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>

    <prop key="show_sql">true</prop>

    </props>
    </property>
    我这样的配置,但是好像没显示sql语句
      

  12.   

    出现了这个
    Hibernate: select exchange0_.USERID as USERID3_, exchange0_.MESSAGE as MESSAGE3_, exchange0_.MESSAGEID as MESSAGEID3_ from EXCHANGE exchange0_ where exchange0_.MESSAGE like ?
      

  13.   

    谢谢你了啊
    我发现了问题了,是Exchange.hbm.xml里面的主键和数据库里面的主键不一致造成的。软件自动生成的信不过啊,害我烦了几天了
      

  14.   

    <hibernate-mapping>
        <class name="com.scnudims.model.Exchange" table="EXCHANGE">
            <id name="messageid" type="java.lang.Integer">
                <column name="MESSAGEID" />
                <generator class="assigned" />
            </id>
            <property name="userid" type="java.lang.String">
                <column name="USERID" />
            </property>
            <property name="message" type="java.lang.String">
                <column name="MESSAGE" />
            </property>
        </class>
    </hibernate-mapping>
    就是这里,软件生成的id name="userid",但是我的数据库用的messageid做主键,改回来就行了