使用jTable和Hibernate在Paging&排序

时间:2014-07-30 23:53:07

标签: java hibernate postgresql

我收到以下异常:

org.hibernate.exception.SQLGrammarException: could not execute query

Caused by: org.postgresql.util.PSQLException: ERREUR: constante non entière dans ORDER BY
  Position: 222

我的GareDAOIpml中有一个mehode来显示数据库中的所有行,我的方法是show():

public List<Gare> show(int startIndex, int pageSize, String jtSorting) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    List<Gare> gares = null;
    try {
        Query q = session.createQuery("from Gare ORDER BY "+jtSorting+" ");
        q.setFirstResult(startIndex);
        q.setMaxResults(pageSize);
        gares = (List<Gare>)q.list();

    } catch (HibernateException e) {
        e.printStackTrace();
        session.getTransaction().rollback();
    }
    session.getTransaction().commit();
    return gares;
}

<script type="text/javascript">
$(document).ready(function() {
    $('#StudentTableContainer').jtable({
        title : 'liste des gares',
        paging: true,
        pageSize: 10,
        sorting: false,

        actions : {
            listAction : 'listergare',
            updateAction: 'updategare',
            deleteAction: 'deletegare'
        },
        fields : {
            idgare : {
                title : 'identifiant de la gare',
                key : true,
                list : false,
                edit : false
            },
            usergare : {
                title : 'utilisateur de la gare',
                width : '25%',
                list : true,
                edit : true
            },
            ville : {
                title : 'ville ',
                width : '25%',
                type: 'date',
                list : true,
                edit : true
            }
        }
    });
    $('#StudentTableContainer').jtable('load');
});

1 个答案:

答案 0 :(得分:1)

根据David J.在[PostgreSQL] non-integer constant in ORDER BY: why exactly, and documentation? - Grokbase中的说法,错误发生在:

  

可能的情况是用户打算使用双引号   指定标识符,而是使用单引号。自文字以来   常量不会影响规划者应该丢弃的排序顺序   它默默地或抛出异常。因为这个例外是首选   常量字面的存在可能意味着查询产生的任何内容   破碎了,应该修好。

检查查询中的 ORDER BY 子句。


另一方面,您可以通过Hibernate将所有生成的SQL语句记录到控制台。在Hibernate配置文件hibernate.cfg.xml中添加下一个属性。

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

另请参阅 How to print a query string with parameter values when using Hibernate


<强>更新

您需要在HQL字符串中使用别名

session.createQuery("SELECT g FROM Gare g" + 
        (jtSorting != null ? " ORDER BY g." + jtSorting : ""));

Chapter 14. HQL: The Hibernate Query Language

中查看详情