我有一个实体,它有一个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和类似的查询从给定日期提取月份值,并将其与给定整数值进行比较。考虑以下示例:
- 实体类
@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;
}
以及以下存储库接口:
- 存储库
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