java - 在 Spring 中使用日期创建 JPA 查询

标签 java spring postgresql spring-data-jpa jpql

这就是我的实体的样子:

@Entity
public class Registration {
@Id
@GeneratedValue
private Integer id;

@org.springframework.format.annotation.DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate date;
}

这就是我的存储库的样子:

@Query(value = "SELECT * FROM registration WHERE MONTH(date) = ?1 AND YEAR(date) = ?2")
List<Registration> findAll(Integer month, Integer year);

这将是服务:

public List<Registration> getCurrentRegistration() {
    LocalDate today = LocalDate.now();
    return registrationRepository.findAll(today.getMonth().getValue(), today.getYear());
}
public List<Registration> getRegistrations(Integer month, Integer year) {
    return registrationRepository.findAll(month, year);
}

如何将我的 native 查询更改为 JPA 查询? JPA 查询能够在 postgresql 和 hsqldb 上运行吗? 为什么 JPA 查询最适合 Spring 应用程序? (或者为什么他们不是)

最佳答案

创建一个规范类并在其中编写以下规范方法。

import javax.persistence.criteria.Predicate;
import org.springframework.data.jpa.domain.Specification;

public class RegistrationSpecification {
public static Specification<Registration > registrationSpecForDate(
      LocalDate invoiceDate ) {
    return (root, cq, cb) -> {

      List<Predicate> predicates = new ArrayList<Predicate>();

      if (invoiceDate!=(null)) {
          predicates.add(cb.greaterThanOrEqualTo(root.get("date"), 
           invoiceDate));
        }

      return cb.and(predicates.toArray(new Predicate[0]));
    };
  }

然后在您的存储库中将此规范注入(inject)到 JPA 的 findAll() 方法中。

`public List<Registration> getRegistrations(LocalDate date) {
  return 
       registrationRepository.findAll
           (RegistrationSpecification.registrationSpecForDate(date));

`

关于java - 在 Spring 中使用日期创建 JPA 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48382486/

相关文章:

java - Java 中的 BufferedImage 和 ColorModel

java - Spring MVC 根据id从多个表映射对象

postgresql - Postgres pl/pgsql 错误 : column "column_name" does not exist

android - 如何在同一查询响应中返回的字段上过滤 GraphQL 嵌套数组?或者如何在多个字段上创建 GraphQL 关系?

java - 自定义调度程序上未调用 RxJava Hook

java - 如何使java中的按钮与文本字段对应?

java - 考虑在您的配置中定义类型为 'com.ensat.services.ProductService' 的 bean

postgresql - 如何获取存储在 PostgreSQL 中的 bytea 的 MIME 类型

java - hibernate javax.persistence.RollbackException : Error while committing the transaction

java - 无法使用 DefaultFormattingConversionService 将字符串转换为 Joda LocalTime