【问题标题】:Jpa custom query with date nearest to present filter日期最接近当前过滤器的 Jpa 自定义查询
【发布时间】:2019-06-10 22:28:36
【问题描述】:

我有使用 JPA 的 SpringBoot webapp,我有一个这样的模型类:

@Entity
class Server {
  .....
  private Date updateDate;

}

现在我想在我的存储库中创建一个自定义查询,以获取属性 updateDate 最接近 Oracle 11g 数据库中当前日期的 Server 实体。

现在我只找到了几个例子,比如 SQLServer:

SELECT TOP 1 *
FROM x
WHERE x.date < @CurrentDate
ORDER BY x.date DESC

我想要在 Oracle 11g DB 中使用 Jpa 构建自定义查询。

谢谢大家

【问题讨论】:

    标签: sql oracle11g spring-data-jpa


    【解决方案1】:

    当您使用 Spring Data JPA 时,您可以创建存储库方法:

    Server findFirstByUpdateDateLessThan(Date currentDate);
    

    您必须将 currentDate 作为参数传递,因为无法在存储库方法中使用 current_date。

    如果您想使用可能的查询。

    你也可以使用普通的 JPA:

    List<Server> list = entityManager
           .createQuery("select s from Server s where s.updateDate < current_date", Server.class)
           .setMaxResults(1)
           .getResultList();
    

    如果你确定你会得到一个结果,你也可以调用 getSingleResult()

    【讨论】:

      【解决方案2】:

      不,也许我表达得不好。无论如何,我想要一种使用 Jpa 的方法,它可以返回日期较新的实体。

      解决办法是:

      public interface ZabbixInstanceRepository extends JpaRepository<ZabbixInstance,String> {
      
        @Query("select z from ZabbixInstance z where z.refreshDate = (select max(z.refreshDate) from ZabbixInstance z)")
        ZabbixInstance findByClosestDate();
      
      }
      

      完美运行。我希望它可以帮助其他人。

      还是谢谢

      【讨论】:

        猜你喜欢
        • 2022-12-12
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-06
        相关资源
        最近更新 更多