以下是我的问题的简化示例。我有这个存储库和实体类。
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
是用于匹配集合中值的关键字。
如何理解属性名称为fooIn
,而不是foo
?
答案 0 :(得分:11)
为了解决这个问题,我使用@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);
}
答案 1 :(得分:3)
Spring在您的方法中解析'In'来创建查询检查用于创建查询的链接您应该将变量fooIn的名称更改为fooin或类似的内容....
答案 2 :(得分:1)
我亲切地观察了代码,发现您的回报不是list
而是object
。
将该部分更改为List<ThingEntity>
。