Как получить объект по max (date) из БД с помощью запроса JPA - PullRequest
0 голосов
/ 16 мая 2019

Предложите, у меня есть таблица "types" со структурой:

id | type |   date
----------------------
1  | one  | 2018-08-01
2  | two  | 2018-08-03
3  | one  | 2018-08-04
4  | two  | 2018-08-05

Мне нужно получить последние записи (последние по дате) для каждого типа.У меня есть собственный запрос для этого:

SELECT id, type, max(date)
FROM types
GROUP BY type, id;

В результате у меня есть:

id | type |   date
----------------------
3  | one  | 2018-08-04
4  | two  | 2018-08-05

Я хочу перевести этот запрос на язык запросов JPA.Как я могу это сделать?И это лучше, чем собственный запрос SQL?Если нет, то почему?Я хочу иметь возможность сделать запрос в репозитории Spring следующим образом:

public interface TypeRepository extends JpaRepository<Type, Long> {

    @Query(value="...")
    List<Type> findLastTypes();
}

Тип объекта:

@Entity
@Table(name = "types")
public class Type extends Identifiable<Long> {

    private String type;
    private LocalDateTime date;

    public Type() {
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    @Override
    public Long getId() {
        return super.id;
    }

    @Column(name = "type", nullable = false)
    public String getType() {
        return type;
    }

    @Column(name = "date", nullable = false)
    public LocalDateTime getDate() {
        return date;
    }

    // ... setters
}

Заранее спасибо

...