这时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是什么
出现了这个 Hibernate: select exchange0_.USERID as USERID3_, exchange0_.MESSAGE as MESSAGE3_, exchange0_.MESSAGEID as MESSAGEID3_ from EXCHANGE exchange0_ where exchange0_.MESSAGE like ?
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);
}最后输出的内容都一样的是为什么?
hql解析出的sql是什么,你执行以下看看。
那问题一定是你的action写错了。
在从action查找。我猜想是Exchange导致的。你把List<Exchange>的Exchange干掉应该没有
问题了。别问我为什么。
那你就把你dao层,如何封装List<Exchange>的method给这位小兄弟看。
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是什么
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="show_sql">true</prop>
</props>
</property>
我这样的配置,但是好像没显示sql语句
Hibernate: select exchange0_.USERID as USERID3_, exchange0_.MESSAGE as MESSAGE3_, exchange0_.MESSAGEID as MESSAGEID3_ from EXCHANGE exchange0_ where exchange0_.MESSAGE like ?
我发现了问题了,是Exchange.hbm.xml里面的主键和数据库里面的主键不一致造成的。软件自动生成的信不过啊,害我烦了几天了
<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做主键,改回来就行了