如果可以通过命名约定(因为查询会很长),我想在与 Spring Data Jpa 的多对多关系中进行查询。这是我的实体:
@Entity
public class Rental extends BaseEntity<Long> {
private int price;
private long clientId;
private long gunTypeId;
}
我想找到最常租用的枪支类型。
我现在使用 Ids 而不是 Spring 注释,因为它是一个 uni 项目,之后我必须更改为 Spring 关系。 这是没有 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 result;
} 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.MappingException:JDBC 类型没有方言映射:2002