这是我的问题的简化示例。我有这个存储库和实体类。
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抛出以下异常。
org.springframework.data.mapping.PropertyReferenceException: No property foo found for type ThingEntity!
看起来Spring正在采用该方法,findByFooInAndBar并认为这foo是我的属性名称,并且in是用于匹配集合中值的关键字。
findByFooInAndBar
foo
in
如何理解属性名称fooIn不是foo?
fooIn
为了克服这个问题,我使用@Query注释手动定义了查询。如果其他人找到不需要手动查询的解决方案,我会很乐意接受。
@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); }