Java HQL(hibernate)时间戳范围匹配
我需要编写一个查询来获取一个时间范围内的对象,当前该查询如下所示:Java HQL(hibernate)时间戳范围匹配,java,hibernate,timestamp,hql,Java,Hibernate,Timestamp,Hql,我需要编写一个查询来获取一个时间范围内的对象,当前该查询如下所示: Timestamp from = ... Timestamp to = ... getHibernateTemplate().find("from " + Person.class.getName() + " ml where ml.lastModifiedOn>="+from.toString()+" and m1.lastModifiedOn<=" + to.toString()); Timestamp f
Timestamp from = ...
Timestamp to = ...
getHibernateTemplate().find("from " + Person.class.getName() + " ml where ml.lastModifiedOn>="+from.toString()+" and m1.lastModifiedOn<=" + to.toString());
Timestamp from=。。。
时间戳到=。。。
getHibernateTemplate().find(“from”+Person.class.getName()+“ml其中ml.lastModifiedOn>=“+from.toString()+”和m1.lastModifiedOn如果在数据库中表示为long,则只需在比较中传递一个long
(from.getTime()
)
否则您可以使用这些函数:second(…)、minute(…)、hour(…)、day(…)、month(…)和year(…)
您只需在比较中传递一个long
(from.getTime()
),如果它在数据库中表示为long
否则,您可以使用以下功能:秒(…)、分钟(…)、小时(…)、日(…)、月(…)和年(…)
这样的功能怎么样
String sql = "from " + Person.class.getName() + " ml where ml.lastModifiedOn>= ? and m1.lastModifiedOn<= ?";
Date from = ...;
Date to = ...;
getHibernateTemplate().find(sql, new Object[] {from,to});
String sql=“from”+Person.class.getName()+“ml where ml.lastModifiedOn>=?和m1.lastModifiedOn类似的东西怎么样
String sql = "from " + Person.class.getName() + " ml where ml.lastModifiedOn>= ? and m1.lastModifiedOn<= ?";
Date from = ...;
Date to = ...;
getHibernateTemplate().find(sql, new Object[] {from,to});
String sql=“from”+Person.class.getName()+“ml,其中ml.lastModifiedOn>=?和m1.lastModifiedOn当前查询中缺少单引号。以下操作应有效:
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
?如果是,则不应使用。当前查询中缺少单引号。以下操作应有效:
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
吗?如果是,您不应该使用。如果您想在两者之间查询某些内容,您可以执行以下操作:
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
更改为您正在使用的任何内容如果您想在这两个时间段之间查询某些内容,可以执行以下操作:
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
更改为您在数据库中使用的任何对象,它表示为DATETIME,而不是那么长。我如何使用这些函数进行完整的DATETIME匹配?在数据库中,它表示为DATETIME,而不是那么长。我如何使用这些函数进行完整的DATETIME匹配?我试过了,得到了答案错误。[错误]13:58:03解析器-无效路径:“m1.lastModifiedOn”[错误]13:58:03解析器-:0:0:意外的子树结尾[错误]13:58:03解析器-二进制运算符的左侧操作数为null org.springframework.orm.hibernate3.HibernateQueryException:无效路径:“m1.lastModifiedOn”[from it.Person-ml其中ml.lastModifiedOn>=?和m1.lastModifiedOn=?和m1.lastModifiedOn我尝试了这个方法,但得到了一个错误。[错误]13:58:03解析器-无效路径:“m1.lastModifiedOn”[error]13:58:03解析器-:0:0:意外的子树结尾[错误]13:58:03解析器-二进制运算符的左侧操作数为null org.springframework.orm.hibernate3.HibernateQueryException:无效路径:“m1.lastModifiedOn”[从it.Person ml中,其中ml.lastModifiedOn>=?和m1.lastModifiedOn=?和m1.lastModifiedOn=?是的,我基本上在整个项目中都使用时间戳,尽管这样做有效:时间戳from=…;时间戳to=…;DetachedCriteria criteria=DetachedCriteria.forClass(Person.class);criteria.add(Restrictions.between(“lastModifiedOn”,from,to));List results=getHibernateTemplate().findByCriteria(标准);是的,我在整个项目中基本上都使用时间戳,尽管这样做有效:时间戳from=…;时间戳to=…;DetachedCriteria criteria=DetachedCriteria.forClass(Person.class);criteria.add(Restrictions.between(“lastModifiedOn”,from,to));列出结果=getHibernateTemplate().findByCriteria(标准);