如何使用包含关键字的属性创建Spring JPA存储库findBy查询?

2022-09-01 05:17:01

这是我的问题的简化示例。我有这个存储库和实体类。

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

春天正在抛出以下异常。

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

看起来Spring正在采用该方法,并认为这是我的属性名称,并且是集合中匹配值的关键字。findByFooInAndBarfooin

我如何理解属性名称是 ,而不是 ?fooInfoo


答案 1

为了克服这个问题,我使用注释手动定义了查询。如果他们找到不需要手动查询的解决方案,我会很乐意接受其他人的答案。@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);
}

答案 2

Spring 正在您的方法中解析“In”以创建查询。检查创建查询的链接:您应该将变量的名称更改为或类似的东西...fooInfooin


推荐