通过 Spring Boot JPA + Postgresql + H2 执行间隔

Posted

技术标签:

【中文标题】通过 Spring Boot JPA + Postgresql + H2 执行间隔【英文标题】:Execute interval through Spring Boot JPA + Postgresql + H2 【发布时间】:2020-04-27 10:41:56 【问题描述】:

我正在尝试在 Spring Boot 中创建 JPA 存储库查询。

我正在使用 spring-data-jpa 2.1.5、spring-boot 2.1.3、postgresql 驱动程序 42.2.5、h2database 1.4.200、Java 1.8

我的条件是:

我必须使用 PostgreSQL 进行生产,使用 H2 进行单元(集成)测试。 我不应该使用本机查询 (postgres x h2)。 我需要从客户表中获取客户记录 但仅限于当前日期前至少 24 小时注册的客户。 所以我的意思是数据库日期。我无法使用 Java 将任何参数传递到查询中。

我的客户实体如下所示:

@Entity
@Table(name = "customer")
public class Customer 

   @Id
   @Column(name = "cust_no")
   private int custNo;

   @Temporal(TemporalType.TIMESTAMP)
   @Column(name = "registration_timestamp")
   private Date registrationTimeStamp;

我的客户存储库将是这样的:

@Repository
public interface CustomerRepository extends JpaRepository<Customer, Integer> 

   @Query(value = "SELECT c FROM Customer c WHERE c.registrationTimeStamp <= SOMETHING")
   List<Customer> getCustomers24HoursAfterRegistration();


我真的不知道我应该把那个地方指什么东西。我想我可以使用像 CURRENT_TIMESTAMP - SOMETHING_REFERS_24_HOURS 这样的东西。 所有的例子都是关于 nativeQuery 的。或者从 Java 传递参数。我不能使用 INTERVAL,因为 Spring JPA 不支持。

我不敢相信这样一个简单的过程不在同时支持两个 RDBMS(PostgreSql 和 H2)的 Spring JPA 中。我想问有没有办法做到这一点?

【问题讨论】:

我认为您可以使用带有日期的字符串。最好的了解方法是在您的数据库中尝试查询或编写单元测试。 【参考方案1】:

如果你不想使用原生查询,那么你必须使用查询方法

你可以做类似的事情

 List<User> findByCreatedAtGreaterThanEqual(Data createdAt);

更多内容可以看(https://www.baeldung.com/spring-data-jpa-query-by-date,https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods)

【讨论】:

以上是关于通过 Spring Boot JPA + Postgresql + H2 执行间隔的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 系列之四:spring boot 整合JPA

Spring Boot Jpa:默认休眠?

基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD

如何区分 JPA Spring boot?

初入spring boot(五 )Spring Data JPA

如何通过使用 JPA + Hibernate 和 Spring-boot 在一个数据库中使用多个模式?