Как выбрать из таблицы с помощью HQL уникальные по одному параметру?
Как выбрать из таблицы с помощью HQL уникальные по одному параметру

Я написал запрос, но запрос не возвращает уникальных значений, но дает все строки, содержащие повторяющиеся строки с тем же ref_id. Итак, select работает неправильно
@Query("SELECT o FROM FeedEntity o WHERE o.referenceId IN (SELECT DISTINCT ol.referenceId FROM FeedEntity ol) AND o.id < :lastId")
List<FeedEntity> getByIdBefore(@Param("lastId") Long lastId, Pageable pageable);
Это класс, отображаемый для запроса:
public class FeedEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private UserEntity user;
@Enumerated
@Column(name = "type")
private FeedType type;
@Column(name = "ref_id")
private Long referenceId;
@Column(name = "create_time")
private Timestamp createTime;
public FeedEntity(UserEntity user, FeedType type, Long referenceId) {
this.user = user;
this.type = type;
this.referenceId = referenceId;
this.createTime = DateTimeUtil.getCurrentTimestamp();
}
}
Мне нужно выбрать все уникальные строки по reference_id (ref_id)
Нативный запрос в Mysql выдал правильное значение
SELECT * FROM feed WHERE id IN (SELECT DISTINCT MIN(Id) FROM feed fe GROUP BY
fe.ref_id)
И вот правильный запрос для выборки.
@Query("SELECT o FROM FeedEntity o WHERE o.id IN (SELECT DISTINCT MIN(o.id)
FROM FeedEntity fe GROUP BY fe.referenceId)")
Надеюсь кому-то будет полезно
Единственное что не работает с доп условием
@Query("SELECT o FROM FeedEntity o WHERE o.id < :lastId AND o.id IN (SELECT
DISTINCT MIN(fe.id) FROM FeedEntity fe GROUP BY fe.referenceId)")
List<FeedEntity> getByIdBefore(@Param("lastId") Long lastId, Pageable
pageable);
Ответы (1 шт):
Автор решения: Vit
→ Ссылка
@Query("SELECT o FROM FeedEntity o WHERE o.id < :lastId AND o.id IN (SELECT
DISTINCT MIN(fe.id) FROM FeedEntity fe GROUP BY fe.referenceId)")
List<FeedEntity> getByIdBefore(@Param("lastId") Long lastId, Pageable
pageable);

