我希望将此SQL语句转换为条件或预测。对不起,我不知道使用哪一个,因为我是Hibernate的新手。我做过一些研究,看起来两者都需要达到我想要的效果。
在我总是在我的程序中使用SQL语句之前,但是当我看到一个示例代码允许您创建查询而不使用Criteria编写SQL语句时,我想使用它,因为它为我提供了更清晰的代码。
提前致谢。
String query = "SELECT MAX(employeeNo) "
+ "FROM Profile "
+ "WHERE SUBSTRING(employeeNo,1,2)='" + yy + "'";
empNo = session.createQuery(query).list().get(0).toString();
此查询获取给定年份yy
的数据库中的最高员工编号。
示例结果为14-229
答案 0 :(得分:1)
这假设您已经为Profile实体定义了一个映射。
Session session = sessionFactory.getCurrentSession();
String empNo = (String) session
.createCriteria(Profile.class)
.add(Restrictions.sqlRestriction("substring(employeeNo,1,2) = ?", yy, StringType.INSTANCE)
.setProjection(Projections.max("employeeNo"))
.uniqueResult();
现在,我不知道我是否同意你的陈述,即这是更清洁。使用Criteria的好处是可以让你动态地建立一个标准,但是它非常冗长,并且它并不清楚你乍一看你想要做什么。另外,由于子字符串函数,强制您混合使用sqlRestriction。相反,您可以使用HQL:
Session session = sessionFactory.getCurrentSession();
String empNo = (String) session.createQuery("SELECT MAX(employeeNo) FROM Profile WHERE substring(employeeNo,1,2) = :year")
.setString("year", yy)
.uniqueResult();
就个人而言,我认为HQL甚至SQL方法都更清晰,并且更好地表达了意图。