Запрос для отношений «многие ко многим» в Spring Jpa

#java #spring #jpa #spring-data-jpa

Вопрос:

Я хочу выполнить запрос во взаимосвязи «многие ко многим» с Jpa Spring Data, если это возможно по соглашению об именах (потому что запрос будет довольно длинным). Это моя сущность:

 @Entity
public class Rental extends BaseEntity<Long> {
    private int price;
    private long clientId;
    private long gunTypeId;
}
 

И я хочу найти самый арендованный тип оружия.

Сейчас я использую идентификаторы вместо аннотаций Spring, потому что это проект uni, и сразу после этого мне нужно перейти на отношения Spring. Это был метод без пружины:

 public GunType getMostRentedGunType() {
        log.trace("getMostRentedGunType: --- method entered");
        try {
            Map<Long, Integer> count = new HashMap<>();
            this.getAllRentals().forEach(rental -> {
                count.put(rental.getGunTypeId(), count.getOrDefault(rental.getGunTypeId(), 0)   1);
            });

            var max = count.entrySet().stream()
                    .max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1)
                    .get()
                    .getKey();
            var result = gunTypeRepository.findById(max).orElse(null);
            log.trace("getMostRentedGunType: result={}", result);
            return resu<
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }
 

Мне интересно, может ли кто-нибудь помочь сделать это по соглашению об именах или с помощью аннотации @Query.

Я попробовал следующим образом:

 @Query(value = "select gt from guntype gt where gt.id in (select r.guntypeid from rental r group by (r.guntypeid) order by count(r) desc limit 1)", nativeQuery = true)
    GunType getMostRentedGunType();
 

но я получаю ошибку:
org.springframework.orm.hibernate5.Исключение HibernateSystemException: Нет сопоставления диалектов для типа JDBC: 2002; вложенное исключение-org.hibernate.Исключение сопоставления: Нет сопоставления диалектов для типа JDBC: 2002

Комментарии:

1. Можете ли вы попробовать что-то вроде @Query(«ВЫБЕРИТЕ r.gunTypeId, количество(r) из группы r по (r.gunTypeId) , ПОРЯДОК ПО количеству(r), ОГРАНИЧЕНИЕ 1»)

2. Таким образом, у меня есть диалектная ошибка. Я добавил это в вопрос, если вы можете мне помочь, пожалуйста