Hibernate命名查询中的错误 [英] Hibernate errors in named queries

查看:138
本文介绍了Hibernate命名查询中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从表中获取当前日期在任何给定月份的第一天和最后一天之间的信息。



我得到一个运行时错误命名查询中的错误:Department.byDate



我向您提供了我认为可能导致问题的代码,如果需要其他代码,请让我知道

我的查询如下所示:

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

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

 公开清单<部门> getRecords(日期dateFirst,Date dateLast){
Session session = sessionFactory.openSession();
session.beginTransaction();

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

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

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

返回depList;
}

我的方法是让月份的第一天和最后一天看起来像这样:

 日历首先= Calendar.getInstance(); (Calendar.getInstance()。get(Calendar.YEAR),Calendar.getInstance()。get(Calendar.MONTH),Calendar.getInstance()。getActualMinimum(Calendar.DAY_OF_MONTH)); 
first.set
日期dateFirst = first.getTime();

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


解决方案


  1. 您正在处理实体及其属性,因此 * 字符没有意义。

  2. HQL / JPQL类和属性名称区分大小写

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

 从部门d选择d,其中d.date> =:第一个AND d.date< =:最后一个


I am trying to pull information from a table where the current date is between the first and last day of any given month.

I am getting a runtime error "Errors in named queries: Department.byDate"

I am providing you with what code I think could be causing the problem, if any additional code is needed please let me know in a comment.

My named query which looks like this:

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

I am using this named query in my DAO in a method which looks like this:

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;
}

My method of getting that first and last days of the months looks like this:

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. In HQL/JPQL you are working with entities and their properties, thus * character has no meaning.
  2. HQL/JPQL class and property names are case sensitive.

You should write your query the following way:

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

这篇关于Hibernate命名查询中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆