from com.huayiluo.hibernate.pojo.Product  where match (uuid,title,intro,color,size,description)  against('a' in boolean mode) and status=1 order by hotSale desc这是hibernate的语句问题出现在match   against(hibernate 好像不支持。)https://forum.hibernate.org/viewtopic.php?p=2256280
国外的人有一个解决方案。可是不太懂。
请问有什么办法解决。我搜索百度,好像没有人出现过这种问题

解决方案 »

  1.   

    你写的是HQL, hql貌似不支持match吧?
      

  2.   

    很多专属函数是不支持的,不行还是变sql吧
      

  3.   

    hibernate 不适合这种情况。 实在不行用native sql得了。
      

  4.   

    那你实在想用,就别用createQuery()方法,用createSQLQuery()
      

  5.   

    +1 要用数据库中的一些特殊函数,你只能用原生sql语句了.
      

  6.   

    public List createSQLQuery(final String sql,final Class cls,final int min,final int max){
    return (List)getHibernateTemplate().execute(new HibernateCallback(){
    public Object doInHibernate(Session session) throws HibernateException, SQLException {
    Query query=session.createSQLQuery(sql).addEntity(cls);
    if(min!=0)
    query.setFirstResult(min);
    if(max!=0)
    query.setMaxResults(max);
    return query.list();
    }});
    }我想他返回List<Product>
      

  7.   

    Hibernate的HQL已经支持大多数数据库函数,肯定不能包括所有, 幸运的是Hibernate已经对此做了相应的方案解决, 也就是Dialect中注册数据库函数.具体做法如下,我们以Mysql5为例   Mysql 的convert函数,现现在数据库的字符集是utf-8,如果想实现中文排序,就需要用convert(filedName using gbk) 实现,但现有的hibernate的hql不能支持此函数, 我们可以现在Dialect注册一个函数,一样不赞成直接修改Hibernate 的源码, 我们可以扩展一个类,如下代码所示import org.hibernate.Hibernate; 
    import org.hibernate.dialect.MySQL5Dialect; 
    import org.hibernate.dialect.function.SQLFunctionTemplate ; public class MySQL5LocalDialect extends MySQL5Dialect { 
    public MySQL5LocalDialect(){
      super(); 
    registerFunction("convert", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using ?2)") );
      }
     }现在applicationContext.xml中或hibernate.hbm.xml中修改 package.MySQL5LocalDialect <property name="hibernate.dialect">
    com.credit.publicmodel.util.MySQL5LocalDialect
    </property>  现在HQL中使用convert方法, 例如: convert(fieldName, 'gbk') , "GBK"也可以是其他字符集---------------------------------------
    别人的文章应该可以处理掉我的问题,可是我不知道怎么修改。