我是JPA和Spring数据的新手。我想在我的订购系统中使用以下逻辑实现一个函数:
我可以用Pure 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);
}
答案 0 :(得分:0)
我很好奇确切的用例是什么。如果您可以依赖于在作为参数提供的即时之后创建的订单的计数器增加的事实,您只需选择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
)