Java 用JPA比较两个日期

Java 用JPA比较两个日期,java,jpa,jpql,Java,Jpa,Jpql,我需要在JPQL查询中比较两个日期,但它不起作用 我的问题是: Query query = em.createQuery( "SELECT h FROM PositionHistoric h, SeoDate d WHERE h.primaryKey.siteDb = :site AND h.primaryKey.engineDb = :engine AND h.primaryKey.keywordDb = :keyw

我需要在JPQL查询中比较两个日期,但它不起作用

我的问题是:

Query query = em.createQuery(
    "SELECT h 
     FROM PositionHistoric h, 
          SeoDate d 
     WHERE h.primaryKey.siteDb = :site 
     AND h.primaryKey.engineDb = :engine 
     AND h.primaryKey.keywordDb = :keyword 
     AND h.date = d 
     AND d.date <= :date 
     ORDER BY h.date DESC");`
Query Query=em.createQuery(
“选择h
从h开始,
塞奥达特d酒店
其中h.primaryKey.siteDb=:site
和h.primaryKey.engineDb=:engine
和h.primaryKey.keywordDb=:关键字
h.date=d

d.date我建议使用java.sql.date而不是java.util.date

因为您将它传递给JPQL(一种SQL)

我通常用时间戳代替日期,但是如果你没有选择的话


是不是:h.date=d.date而不是h.date=d?

您应该使用的查询是:

 FROM PositionHistoric h
   INNER JOIN FETCH h.date
WHERE h.primaryKey.siteDb = :site
  AND h.primaryKey.engineDb = :engine
  AND h.primaryKey.keywordDb = :keyword
  AND h.date.date <= :date
来自位置h
内部连接获取h.date
其中h.primaryKey.siteDb=:site
和h.primaryKey.engineDb=:engine
和h.primaryKey.keywordDb=:关键字

还有h.date.date你能把
PositionHistoric
SeoDate
类的片段放在注释相关属性的地方吗?很难理解其他情况;你的命名方案似乎不一致。你的解决方案的问题是我获得了PositionHistoric,但我不确定这是否正确对象是已知的最后一个日期您将获得一个
positionhistorical
实体列表;所有这些实体都将链接到日期早于您的参数的
SeoDate
实体。这就是您发布的原始查询试图做的,但它可以工作。如果您需要做其他事情,您需要澄清您的问题并解释这正是你想要实现的。我发现了我的错误。在我的primaryKey中,日期没有包含在内,所以JPA每次都返回相同的对象。我已经在primaryKey中包含了日期,所有工作都很好。谢谢你的回答。