JPA存储库只在某个月通过日期字段查找



我有一个实体,它有一个LocalDateTime字段。我想按此日期字段的月份查询这些实体。我有以下查询:

List<MyEntity> findAllByDate_MonthValue(Integer monthValue)

这不起作用,它会产生以下错误:

org.springframework.beans.factory.BeanCreationException:创建名为"myEntityRepository"的bean时出错:FactoryBean在创建对象时引发异常;嵌套异常为java.lang.IollegalArgumentException:无法为方法公共抽象java.util.List MyEntityRepository.findAllByDate_MonthValue(Integer(创建查询!非法尝试取消引用基本类型的路径源[null.date]

我没有得到错误,我尝试了其他方法,但都没有成功。此外,我尝试使用@Query注释,但我没有YEAR/MONTH/etc... and neither EXTRACT函数。

假设您使用Hibernate作为ORM提供程序,您可以使用HQL和类似的查询从给定日期提取月份值,并将其与给定整数值进行比较。考虑以下示例:

  1. 实体类
@Table(name = "SomeEntity")
@Entity(name = "SomeEntity")
@Data
public class SomeEntityClass {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String someColumn;
@Basic
private ZonedDateTime someDate;
}

以及以下存储库接口:

  1. 存储库
public interface SomeEntityRepository extends JpaRepository<SomeEntityClass, Long> {
@Query(
name = "SomeEntityClass.findAllByMonth",
value = "SELECT E FROM SomeEntity E WHERE MONTH(E.someDate) = :monthValue"
)
List<SomeEntityClass> findAllByMonth(@Param("monthValue") Integer monthValue);
}

我希望这对你有用。

不能使用对月份的引用。

您需要将查询转换为类似的内容

findAllByDateBetween

此方法将使用两个日期作为查询的次要和主要限制。因此,您需要创建一个方法来获取每月的第一天和下个月的第一天,以便正确调用此方法。

JPA方法中接受的所有关键字的完整列表可在此处获得,对Between关键字的引用如下:

Keyword    Example                  JPQL Snippet
---------------------------------------------------
Between    findByStartDateBetween   ... where x.startDate between ?1 and ?2

最新更新