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

Ben*_* M. 18 java spring-data-jpa

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

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 */
}
Run Code Online (Sandbox Code Playgroud)

Spring正在抛出以下异常.

org.springframework.data.mapping.PropertyReferenceException: No property foo found for type ThingEntity!
Run Code Online (Sandbox Code Playgroud)

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

我如何理解属性名称是fooIn不是foo

Ben*_* M. 15

为了解决这个问题,我使用@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);
}
Run Code Online (Sandbox Code Playgroud)


小智 11

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