我收到以下异常:
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');
});
答案 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 : ""));
中查看详情