JPQL-基于最新元素实现条件逻辑



我是JPA和春季数据的新手。我想在我的订购系统中实现具有以下逻辑的函数:

  1. 如果给定时间戳后没有订单,请返回1
  2. 否则返回最后订单的计数器 1

我可以用纯JPQL实现这种逻辑吗?

订单实体:

@Entity
public class Order {
    @Id
    @GeneratedValue
    private UUID id;
    private Integer counter;
    @CreationTimestamp
    private Timestamp creationTimestamp;
    ...

orderrepository.java:

@Repository
public interface OrderRepository extends CrudRepository<Order, UUID> {
    // TODO what goes after else?
    @Query("select case when count(o) < 1 then 1 else ... from Order o where o.creationTimestamp > :timestamp order by o.creationTimestamp desc")
    Integer nextCounter(@Param("timestamp") Timestamp timestamp);
}

我很好奇确切的用例是什么。如果您可以依靠以下事实:随着参数的增加,在提供的即时后创建的订单计数器,则可以选择NVL(MAX(o.counter), 0) + 1或事件COUNT(o) + 1。我知道情况并非如此。

您想要的子查询可以实现:

SELECT NVL(MAX(o.counter), 0) + 1
FROM Order o
WHERE o.creationTimestamp = (
    SELECT MAX(o.creationTimestamp) 
    FROM Order o 
    WHERE o.creationTimestamp > :timestamp
)

最新更新