17

Abbiamo implementato i nostri repository esattamente come dimostrato nella documentazione Spring Data. Tutto andava bene fino all'aggiornamento da STS 2.9 a STS 3.1. Tutti i tentativi di far scomparire questi errori sono falliti e in alcuni casi non hanno nemmeno senso! Non corrispondono a nessuna proprietà nell'interfaccia o nelle entità utilizzate!Ottieni l'errore "Query derivata non valida" dappertutto nelle nostre interfacce Spring Data JpaRepository in STS 3.1

Ecco un esempio:

public interface CreditNotesRepository extends JpaRepository<CreditNotes, Long> { 

    CreditNotes findCurrentCreditNotes(Long shipmentDetailId); 
} 

Il findCurrentCreditNotes è una query denominata nel nostro organismo. Questo codice viene eseguito perfettamente.

@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)") 
}) 

E l'errore otteniamo:

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

Anche se questa è solo una bandiera (non influenza la compilazione), è fastidioso e confuso. Qualcuno può far luce su questo? E spiegamelo come se avessi 6 anni! ;)

risposta

0

Ho appena passato tutto questo da solo. Sfortunatamente, l'implementazione di Spring Data è cambiata tra 1.1 e 1.2. Non supporta più la dichiarazione XML <repository>. È possibile impostare un suffisso personalizzato, ma per impostazione predefinita si aspetta un bean con nome classe <InterfaceName>Impl. Se non riesce a trovare l'implementazione del repository personalizzato, inizi a ricevere errori come quello che stai incontrando. Sta cercando di creare metodi per eseguire query sugli oggetti in base ai nomi dei metodi nell'interfaccia.

Un'alternativa è di eseguire il backup della versione di Spring Data fino a 1.1 e specificare uno schema di http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd nel codice XML.

23

Al post sul Forum di Primavera, Primavera team ha annunciato che

Si è già fissato per la STS 3.3.0

Non ho controllato questa versione ancora. Ma sto usando 3.5.0.RELEASE e il problema torna! La mia soluzione è di deselezionare valido Derivato Query

Invalid Derived Query

+2

Si verifica anche in STS 3.6.3.RELEASE –

+2

E ancora in 3.7 – Kai

+0

E ancora in 3.8 – Jagger

6

C'è anche soluzione per questo. Aggiungi annotazione @Query sulla definizione del metodo nel repository senza query JPQL/SQL definita.

Ecco esempio:

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

In questo caso prende il nome di query OrderModel.findByFirstNameAndAgeNotZero verrà utilizzato.Il tuo errore Eclipse Invalid derived query dovrebbe anche scomparire senza bisogno di convalida invalidanti come descritto da @Tuan Dang

Controllato su Eclipse 4.5.1 con il plugin installato molla per @NamedQuery e @NamedNativeQuery.

Problemi correlati