2015-10-15 6 views
11

Ecco un esempio semplificato del mio problema. Ho questo repository e classe entità.Come si crea un finder Spring JPA findBy query utilizzando una proprietà che contiene una parola chiave?

public interface ThingRepository extends JpaRepository<ThingEntity, Long> { 
    ThingEntity findByFooInAndBar(String fooIn, String bar); 
} 

@Entity 
public class ThingEntity { 
    @Column(name="FOO_IN", nullable=false, length=1) 
    private String fooIn; 

    public String getFooIn() { 
     return fooIn; 
    } 

    public setFooIn(String fooIn) { 
     this.fooIn = fooIn; 
    } 

    /* not including bar property for brevity's sake */ 
} 

La molla sta lanciando la seguente eccezione.

org.springframework.data.mapping.PropertyReferenceException: No property foo found for type ThingEntity! 

Sembra primavera sta prendendo il metodo findByFooInAndBar e pensa che foo è il mio nome proprietà e in è una parola chiave per la corrispondenza dei valori all'interno di una collezione.

Come faccio a capire che il nome della proprietà è fooIn, non foo?

+0

non credo che ci sia un modo per aggirare questo comportamento diverso da scrivere il proprio metodo. O semplicemente rinominare il campo in 'fooin', magari senza la maiuscola? –

risposta

6

Per risolvere questo problema, ho definito manualmente la query utilizzando l'annotazione @Query. Accetterò felicemente la risposta di qualcun altro se troveranno una soluzione che non richiede una query manuale.

public interface ThingRepository extends JpaRepository<ThingEntity, Long> { 

    @Query("SELECT t FROM Thing t WHERE t.fooIn = ?1 AND t.bar = ?2") 
    ThingEntity findByFooInAndBar(String fooIn, String bar); 
} 
1

primavera è l'analisi 'In' nel metodo per creare controllare la query il link per creare la query si dovrebbe cambiare il nome della variabile per fooIn fooin o qualcosa del genere ....