java - 命名查询中的 Hibernate 错误

标签 java mysql hibernate pojo named-query

我正在尝试从当前日期介于任何给定月份的第一天和最后一天之间的表格中提取信息。

我收到运行时错误“命名查询中的错误:Department.byDate”

我正在向您提供我认为可能导致问题的代码,如果需要任何其他代码,请在评论中告诉我。

我的命名查询如下所示:

@NamedQuery(name="Department.byDate", query="select * from department where date >= :first AND date <= :last")

我在我的 DAO 中使用这个命名查询的方法如下所示:

public List<Department> getRecords(Date dateFirst, Date dateLast){
    Session session= sessionFactory.openSession();
    session.beginTransaction();

    Query query = session.getNamedQuery("Department.byDate");
    query.setDate("first", dateFirst);
    query.setDate("last", dateLast);

    List<Department> depList = (List<Department>)query.list();

    session.getTransaction().commit();
    session.close();

    return depList;
}

我获取月份的第一天和最后一天的方法如下所示:

Calendar first = Calendar.getInstance();
first.set(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH));
Date dateFirst = first.getTime();

Calendar last = Calendar.getInstance();
first.set(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
Date dateLast = last.getTime();

最佳答案

  1. 在 HQL/JPQL 中,您使用的是实体及其属性,因此 * 字符没有意义。
  2. HQL/JPQL 类和属性名称是 case sensitive .

您应该按以下方式编写查询:

select d from Department d where d.date >= :first AND d.date <= :last

关于java - 命名查询中的 Hibernate 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35303659/

相关文章:

java - 从 JSOUP 中的表中选择 tr

java - Google Dictionary API 现在是否属于 Google 自定义引擎?

java - 连接到 Eclipse 构建过程?

php - 数据库设计 : foreign keys and normalization

MySQL 从列中返回可能的对

mysql - WebMatrix + MySQL 链接

java - Hibernate Utils 无法在 JSP 页面中运行

java - Spring mysql : Data truncation (data too long for column)

Java 引用值是地址值?

hibernate - 如何使用实体查询框架对以下查询进行建模