Хотя ваш запрос трудно прочитать, и вы должны использовать подготовленное утверждение, я не вижу ничего плохого в синтаксисе. Таким образом, ошибка, вероятно, происходит, потому что TOP
не является допустимым синтаксисом HQL. TOP
действительно поддерживается только в базах данных Microsoft, таких как SQL Server или Access. Попробуйте использовать LIMIT
вместо:
try {
Session session = HibernateUtilSQL.getSessionFactory().openSession();
Connection conn = session.connection();
String sql = "SELECT ID FROM IServe WHERE ExpireDate >= ? AND TelcoID = ? AND ProductID = ? AND RechargeAmt = ? AND Available = 1 ORDER BY ExpireDate, SN LIMIT ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setDate(1, sqlDate);
ps.setInt(2, importStockList.getTelcoId());
ps.setInt(3, importStockList.getProductId());
ps.setInt(4, importStockList.getRechargeAmt());
ps.setInt(5, importStockList.getOrderQuantity());
ResultSet rs = ps.executeQuery();
while(rs.next()) {
// process result set here
}
}
catch(HibernateException e) {
e.printStackTrace();
}