Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you create a Spring JPA repository findBy query using a property that contains a keyword?

Here is a simplified example of my problem. I have this repository and entity class.

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

Spring is throwing the following exception.

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

It looks like Spring is taking the method findByFooInAndBar and thinks that foo is my property name and in is a keyword for matching values within a collection.

How do I get it to understand that the property name is fooIn, not foo?

like image 905
Ben M. Avatar asked Oct 15 '15 16:10

Ben M.


People also ask

How do you write a query in a repository?

Creating SQL QueriesAdd a query method to our repository interface. Annotate the query method with the @Query annotation, and specify the invoked query by setting it as the value of the @Query annotation's value attribute. Set the value of the @Query annotation's nativeQuery attribute to true.


1 Answers

To overcome this problem, I've defined the query manually using the @Query annotation. I'll happily accept anyone else's answer if they find a solution that doesn't require a manual query.

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); } 
like image 186
Ben M. Avatar answered Sep 19 '22 10:09

Ben M.