首页 > 解决方案 > 有没有办法在 spring jpa 方法中获取 A & (B | C) ,其中表达式 B 和 C 与相同的属性连接?

问题描述

结果,我想要一个只有一个字符串参数(表达式A)的方法。但是 B 和 C 表达式具有相同的属性。这意味着“今天的日期属性为 null 或 less_or_equal”。

所以,我所拥有的是这种方法:

List<EntityObject> findByMyDateIsNullAndMyStringOrMyStringAndMyDateLessThanEqual(Date myDate, String myString);

default List<EntityObject> findByMyDateIsNullAndMyStringOrMyStringAndMyDateLessThanEqual(String myString) {
    return findByMyDateIsNullAndMyStringOrMyStringAndMyDateLessThanEqual(Date.valueOf(LocalDate.now()),myString);
}

但是,当我尝试在 Maven 中安装时,由于测试,我收到此错误:

 Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List MyItemRepository.findByMyDateIsNullAndMyStringOrMyStringAndMyDateLessThanEqual(java.sql.Date,java.lang.String)! null

我知道另一种方法是将@Query 与自定义查询一起使用,但我更喜欢这个。可能吗?

标签: spring-bootspring-data-jpa

解决方案


我的同事帮了我,所以...

首先我忘记了 findAll,因为它可能更多......

其次,我需要约会 IsLessThanEqual ...

第三,我需要 3 个参数。只有 3 个,因为已经在方法名称中使用“IsNull”定义了一个。所以,我需要 2 个字符串参数和 1 个日期参数

List<EntityObject> findAllByMyDateIsNullAndMyStringOrMyStringAndMyDateIsLessThanEqual(Date myDate, String myString1, String myString2);

然后我必须用预定义的值来调用它,日期小于或等于今天的日期

    default List<EntityObject> findAllByMyDateIsNullAndMyStringOrMyStringAndMyDateIsLessThanEqual(String string) {
    return findAllByMyDateIsNullAndMyStringOrMyStringAndMyDateIsLessThanEqual(Date.valueOf(LocalDate.now()),string,string);
}

推荐阅读