2015-10-15 6 views
11

Hier ist ein vereinfachtes Beispiel für mein Problem. Ich habe dieses Repository und diese Entitätsklasse.Wie erstellen Sie eine Spring JPA-Repository-Abfrage findBy mithilfe einer Eigenschaft, die ein Schlüsselwort enthält?

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 */ 
} 

Der Frühling wirft die folgende Ausnahme.

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

Es sieht aus wie Frühling ist die Methode findByFooInAndBar nehmen und denkt, dass foo mein Eigentum Name ist und in ist ein Schlüsselwort für die Werte innerhalb einer Sammlung passen.

Wie bekomme ich es zu verstehen, dass der Name der Eigenschaft fooIn ist, nicht foo?

+0

ich glaube nicht, dass es einen Weg gibt, dieses Verhalten anders als das Schreiben Ihrer eigenen Verfahren zu umgehen. Oder einfach das Feld auf "fooin" umbenennen, vielleicht ohne Großbuchstaben? –

Antwort

6

Um dieses Problem zu beheben, habe ich die Abfrage manuell mit der @Query Annotation definiert. Ich nehme gerne die Antwort von jemand anderem an, wenn sie eine Lösung finden, die keine manuelle Abfrage erfordert.

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

Frühling Parsen ‚In‘ in Ihrer Methode für erstellen Sie Ihre Abfrage die Abfrage überprüfen Sie den Link erstellen sollten Sie den Namen der Variablen fooIn so fooin oder etwas ändern ....

Verwandte Themen