JPQL - фильтр на основе последнего обновленного атрибута метки времени внутри элементов @ElementCollection - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть @ Entity-s (Заказ), который может изменить их состояние. Каждое изменение состояния представляется с помощью объекта @Embeddable (OrderUpdate), добавляемого к коллекции @ElementCollection (Order.updates). Как я могу запросить заказы на основе самого последнего обновления?

Моя цель состоит в том, чтобы выбрать те Ордера, в которых состояние последнего обновления - СДЕЛАНО.

Заказ:

@Entity
public class Order {

    @Id
    @GeneratedValue
    private UUID id;

    @ElementCollection
    private List<OrderUpdate> updates;
    ...

OrderUpdate:

@Embeddable
public class OrderUpdate {

    @ManyToOne
    private User host;

    private String state;

    @CreationTimestamp
    private Timestamp timestamp;
    ...

OrderRepository:

@Repository
public interface OrderRepository extends CrudRepository<Order, UUID> {

    @Query("select o from Order o where [o.updates.last.state TODO] = DONE")
    Set<Order> findDone();

}

1 Ответ

0 голосов
/ 28 апреля 2018

@Query("select o from Order o inner join o.updates u where u.state = ''DONE'' and u.timestamp = (select max(u2.timestamp) from Order o2 inner join o2.updates u2 where o2.id = o.id)) Если я понимаю, правильность

...