Я работаю над API отдыха, где я пытаюсь найти n лучших исполнителей во время сеанса.
Это пользователь сущности, который хранит информацию о пользователе
@Entity
@Table(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 7401548380514451401L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@Column(name = "name")
String name;
@NotNull
@Email
@Column(name = "email")
String email;
@Column(name = "registration_number")
String registrationNumber;
// getter and setter
}
Этоэто вторая сущность, которая сохраняет детали сеанса: -
@Entity
@Table(name = "session")
public class Session implements Serializable {
private static final long serialVersionUID = 0x7E414EAA3DB0C391L;
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
Long id;
@Column(name = "start_time")
@NotNull
String startTime;
@Column(name = "end_time")
@NotNull
String endTime;
@Column(name = "distance")
Long distance;
@JoinColumn(name = "driver_id", referencedColumnName = "id")
@ManyToOne
User trainer;
@JoinColumn(name = "sessionr_id", referencedColumnName = "id")
@ManyToOne
User trainee; //getter and setters
}
Это третья модель, в которой мы сохраняем результат из сеанса и пользовательской сущности
открытый класс TopTrainer {
private String name;
private String email;
private Long totalSessionDurationInSeconds;
private Long maxSessionDurationInSecods;
private Double averageDistance;
/**
* Constructor for TopTrainer
*
* @param name
* @param email
* @param totalSessionDurationInSeconds
* @param maxSessionDurationInSecods
* @param averageDistance
*/
public TopTrainer(String name, String email, Long totalSessionDurationInSeconds, Long maxSessionDurationInSecods,
Double averageDistance) {
this.setName(name);
this.setEmail(email);
this.setAverageDistance(averageDistance);
this.setMaxSessionDurationInSecods(maxSessionDurationInSecods);
this.setTotalSessionDurationInSeconds(totalSessionDurationInSeconds);
}
public TopTrainer() {
}
//Getter and Setter}
Это контроллер, который вызывает службу тренера, чтобы получить желаемый результат
@GetMapping(path = "/api/top-trainer")
public ResponseEntity<List<TopTrainer>> getTopTrainer(@RequestParam(value = "max", defaultValue = "5") Long count,
@RequestParam(value = "startTime", required = true) @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime startTime,
@RequestParam(value = "endTime", required = true) @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime endTime) {
//To do
}
Я застрял в этой точке на долгое время.Где у меня есть список лучших n тренеров между выбранной отметкой времени на основе их среднего сеанса, а также общего времени сеанса и максимального времени сеанса.
Я новичок в JPA (CrudRepository<Session,Long>)
и я не могу понять, как извлечь желаемый результат, а также как выполнить агрегацию для объекта.
@RestResource(exported = false)
public interface SessionRepository extends CrudRepository<Session, Long> {
Optional<List<TopTrainer>> findByStartTimeAfterAndEndTimeBefore(String startTime, String endTime);
}
Может кто-нибудь как] ответить на это.Мы также можем использовать критерии запроса