在 Spring Jpa 中查询多对多关系

时间:2021-04-09 17:00:30

标签: java spring jpa spring-data-jpa

如果可以通过命名约定(因为查询会很长),我想在与 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

0 个答案:

没有答案