Ben M. Ben M. - 5 months ago 175
Java Question

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
?

Answer

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);
}