Репозиторий JPA findBySOMETHING, не удалось извлечь результат - PullRequest
0 голосов
/ 05 августа 2020

Я использую репозиторий JPA для какого-то игрушечного проекта, я хочу получить Список объектов ЧТО-ТО, но результат could not extract ResultSet; SQL[n/a].

Это мой объект (ничего важного, просто сосредоточьтесь на lob plz )

{
    ...
    private Long id

    @Lob
    @Column(columnDefinition = "text")
    private String content;
    ...
}

Затем я использую репозиторий для findByContentLike("CONTENT"), тогда результат не удается, причина в том, что не удается извлечь результат.

почему это произошло? даже я установил на application.properties как spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

кто-нибудь знает об этой ошибке? пожалуйста, выведи меня к свету.

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Запросы JPA-методов требуют особого синтаксиса. Чаще всего они построены как: findBy + поле вашей сущности. В вашем случае like является избыточным.

См. Эту ссылку на документы для примеров.

По мере увеличения сложности вы можете захотеть написать свои собственные запросы , используя JPQL. Небольшой пример:

@Query("SELECT p FROM Product p "
            + "LEFT JOIN p.categories category "
            + "WHERE UPPER(p.name) LIKE UPPER(CONCAT('%', COALESCE(:searchRequest, ''), '%')) "
            + "AND UPPER(p.description) LIKE UPPER(CONCAT('%', COALESCE(:description, ''), '%')) "
            + "AND p.price BETWEEN :priceLow AND :priceHigh "
            + "AND p.averageRating >= :averageRating "
            + "AND p.archived = :archived "
            + "AND ((category.name IN :selectedCategories) "
            + "OR (:amountOfSelectedCategories = 0 AND category IN (SELECT c FROM Category c))) "
            + "GROUP BY p "
            + "HAVING SIZE(p.categories) >= :amountOfSelectedCategories"
    )
    Page<Product> findAllBySearchModel(
            Pageable pageable,
            @Param("searchRequest") String searchRequest,
            @Param("description") String description,
            @Param("priceLow") BigDecimal priceLow,
            @Param("priceHigh") BigDecimal priceHigh,
            @Param("averageRating") double averageRating,
            @Param("archived") boolean archived,
            @Param("selectedCategories") List<String> selectedCategories,
            @Param("amountOfSelectedCategories") int amountOfSelectedCategories
    );

Не забудьте пометить свой класс сущности @Entity и расширить репозиторий JpaRepository<MyEntityClass, Long>, где Long соответствует полю @Id вашей сущности.

0 голосов
/ 05 августа 2020

Если вам нужна автоматическая привязка параметров, заключенная в % (подстановочный знак), используйте

findByContentContaining("Content")

Или вам нужно вручную добавить % (подстановочный знак) в строку

findByContentLike("%Content%")

...