Получите ошибку "Неверный производный запрос" повсюду в наших Spring интерфейсах Data JpaRepository в STS 3.1 - программирование
Подтвердить что ты не робот

Получите ошибку "Неверный производный запрос" повсюду в наших Spring интерфейсах Data JpaRepository в STS 3.1

Мы внедрили наши репозитории в точности, как показано в документации по документам Spring. Все было нормально, пока мы не перешли с STS 2.9 на STS 3.1. Все попытки получить эти ошибки исчезли, и в некоторых случаях они даже не имеют смысла! Они не соответствуют каким-либо свойствам в интерфейсе или используемых объектах!

Вот пример:

public interface CreditNotesRepository extends JpaRepository<CreditNotes, Long> {

    CreditNotes findCurrentCreditNotes(Long shipmentDetailId);
}

findCurrentCreditNotes - это именованный запрос в нашей сущности. Этот код выполняется отлично.

@NamedQueries({
    @NamedQuery(name = "CreditNotes.getCount", query = "SELECT COUNT(f) FROM CreditNotes f"),
    @NamedQuery(name = "CreditNotes.findCurrentCreditNotes", query =
        "SELECT creditNotes FROM CreditNotes creditNotes"
        + " WHERE creditNotes.shipmentDetail.shipmentDetailId = ?1 "
        + " AND creditNotes.notesSeqNumber =  (SELECT max(creditNotes2.notesSeqNumber) FROM CreditNotes creditNotes2"
        + " WHERE creditNotes.shipmentDetail.shipmentDetailId = creditNotes2.shipmentDetail.shipmentDetailId)")
})

И получим ошибку:

Invalid derived query! No property find found for type ca.cole.freight.model.CreditNotes

Хотя это всего лишь флаг (не влияет на компиляцию), он раздражает и запутывает. Может кто-нибудь пролить некоторый свет на это? И объясните это мне, как мне 6 лет!;)

4b9b3361

Ответ 1

Это ошибка IDE, описанная в следующем сообщении:

http://forum.springsource.org/showthread.php?138585-Invalid-derived-query!-No-property-delete-found-for-type-java-lang-Object

Тем временем вы можете отключить проверку в настройках / spring/validators валидатора/Data validator снимите флажок недопустимый производный запрос, а STS больше не будет помечать маркер.

Ответ 2

В post на форуме Spring команда Spring объявила, что

Он уже исправлен для STS 3.3.0

Я еще не проверял эту версию. Но я использую 3.5.0.RELEASE, и проблема возвращается! Мое исправление заключается в том, чтобы снять флажок Недопустимый производный запрос

Invalid Derived Query

Ответ 3

Существует также обходное решение для этого. Добавьте @Query аннотацию в определение вашего метода в вашем репозитории без определенного запроса в формате JPQL/SQL.

Вот пример:

@Query
List<OwnerModel> findByFirstNameAndAgeNotZero(@Param(value = "firstName") String firstName);

В этом случае будет использоваться запрос OrderModel.findByFirstNameAndAgeNotZero. Ваша ошибка Eclipse Invalid derived query также должна исчезнуть без необходимости отключать проверку, как описано @Tuan Dang

Проверено на Eclipse 4.5.1 с плагином Spring, установленным для @NamedQuery и @NamedNativeQuery.

Ответ 4

Я только что пережил это сам. К сожалению, реализация данных Spring изменилась между 1.1 и 1.2. Он больше не поддерживает декларацию XML <repository>. Вы можете настроить собственный постфикс, но по умолчанию он ожидает bean имени класса <InterfaceName>Impl. Если он не может найти реализацию пользовательского репозитория, вы начинаете получать ошибки, подобные тому, с которым вы сталкиваетесь. Он пытается создать методы для запроса объектов на основе имен методов в вашем интерфейсе.

Альтернативой является поддержка вашей версии Spring Data до 1.1 и указание схемы http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd в вашем XML.