有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HQL(hibernate)时间戳范围匹配

我需要编写一个查询来获取一个时间范围内的对象,当前该查询如下所示:

Timestamp from = ... 
Timestamp to = ...

getHibernateTemplate().find("from " + Person.class.getName() + " ml where ml.lastModifiedOn>="+from.toString()+" and m1.lastModifiedOn<=" + to.toString());

然而,这显然不起作用。如何将时间戳格式化为查询可以接受的格式

组织。springframework。奥姆。冬眠3。HibernateQueryException:意外标记:第1行第123列附近的16[来自Person ml,其中ml.lastModifiedOn>;=2010-02-12 16:00:21.292和m1.lastModifiedOn

共 (4) 个答案

  1. # 1 楼答案

    只要在比较中传递一个longfrom.getTime()),如果它在数据库中表示为long

    否则,您可以使用以下函数:second(...), minute(...), hour(...), day(...), month(...), and year(...)

  2. # 2 楼答案

    如果您想在之间查询某些内容,可以执行以下操作:

     public List findPerson() {
       Date from = ...;
       Date to = ...;
       return entityManager.createQuery(
         "SELECT p from Person p WHERE p.lastModifiedOn BETWEEN ?1 AND ?2")
         .setParameter(1,from, TemporalType.DATE)
         .setParameter(2,to, TemporalType.DATE).getResultList();
    }
    

    您可能需要将TemporalType.DATE更改为您正在使用的任何内容

  3. # 3 楼答案

    像这样的怎么样

        String sql = "from " + Person.class.getName() + " ml where ml.lastModifiedOn>= ? and m1.lastModifiedOn<= ?";
        Date from = ...;
        Date to = ...;
    
        getHibernateTemplate().find(sql, new Object[] {from,to});
    
  4. # 4 楼答案

    当前查询中缺少单引号。以下方面应起作用:

    from Person ml where ml.lastModifiedOn 
    between '2010-02-12 16:00:21.292' and '2010-02-12 23:00:21.292' 
    

    请注意,我不知道为什么不将Date实例传递给以下查询:

    from Person ml where ml.lastModifiedOn between :from and :to 
    

    你在这里使用java.sql.Timestamp吗?如果是,你不应该