#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. Таким образом, у меня есть диалектная ошибка. Я добавил это в вопрос, если вы можете мне помочь, пожалуйста