如何在 JPQL 查询中从 LocalDate 获取月份?

Posted

技术标签:

【中文标题】如何在 JPQL 查询中从 LocalDate 获取月份?【英文标题】:How do I get a Month from LocalDate in JPQL query? 【发布时间】:2018-08-12 10:26:25 【问题描述】:

我收到了一个带有LocalDate 作为created 属性的交易:

private LocalDate created;

我还得到了以下查询,以从我的表 transaction 中检索每个日期。

SELECT DISTINCT t.created FROM Transaction t

然而,这只是给了我所有日期,我将这些日期映射到找到的所有月份。

public List<Month> findAllUsesdMonth() 
  return getEm().createNamedQuery(Transaction.FIND_ALL_MONTH, LocalDate.class).getResultList().stream().map(LocalDate::getMonth)
        .collect(Collectors.toList());

这显然会导致重复月份,因为我选择了不同的日期而不是不同的月份。一种解决方法是使用 Set 而不是 List。

我想只检索 JPQL 查询中的月份,而不是之后映射它们。有没有可能这样做?

【问题讨论】:

@Saveen 谢谢!在提交之前,我应该更清楚地阅读我的问题。 :// 您可以在问题中添加日期格式(保存在数据库中)吗? 【参考方案1】:

日期格式:yyyy-MM-dd HH:mm:ss

查询:SELECT t FROM Transaction t GROUP BY (SUBSTRING(t.created, 6, 7))

通过调用此NamedQuery,您将获得不同的月份。

【讨论】:

我将通过您的查询获得整个交易,而不是 LocalDate 的月份。

以上是关于如何在 JPQL 查询中从 LocalDate 获取月份?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jpql 查询中仅查询超类实体?

如何使用JPQL写纯SQL语句

JPQL:多重连接。如何做我的命名查询?

如何在一个 JPQL 查询中使用多个 JOIN FETCH

如何在 JPQL(Spring JPA 查询)中使用 JOIN 执行 UPDATE 语句?

如何使用 Hibernate 5 正确创建 JPQL 查询(不推荐使用查询类型)