如何设置Spring Data JPA查询方法必须始终设置为true的参数值?

And*_*ili 4 java spring jpa spring-data spring-data-jpa

我不是很喜欢Hibernate和Spring Data JPA,我有以下疑问.

我有这个方法签名正确执行查询:

@Repository
public interface AccomodationMediaDAO extends JpaRepository<AccomodationMedia, Long> {

    AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, boolean isMaster);

}
Run Code Online (Sandbox Code Playgroud)

它找到(在AccomodationMedia实体类映射的表上)具有名为idAccomodation的字段的单个记录,该字段设置有由accomodationId方法参数表示的Long值,并且字段isMaster由isMaster布尔值重新呈现.

它工作正常,但我的"问题"是这样做我总是显式传递布尔值isMaster参数的.

此参数必须始终设置为true,所以我尝试以这种方式更改以前的方法签名:

AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, true);
Run Code Online (Sandbox Code Playgroud)

但IntelliJ显示错误:标识符或预期类型.

为什么?我可以设置必须将此参数的值显式设置为true布尔值吗?

Oli*_*ohm 8

参考文档中所述,您只需使用IsTrue关键字:

AccomodationMedia findByIdAccomodationAndIsMasterIsTrue(Long accomodationId);
Run Code Online (Sandbox Code Playgroud)


rad*_*doh 5

如果您使用的是 Java 8,您可以通过实现重载它default

public interface AccomodationMediaDAO extends JpaRepository<AccomodationMedia, Long> {

    AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, boolean isMaster);

    default AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId) {
       return findByIdAccomodationAndIsMaster(accomodationId, true);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是您不能为方法参数提供默认值。例如看到这个问题