Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设置Spring数据JPA查询方法必须是始终设置为true的参数值?_Java_Spring_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

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

Java 如何设置Spring数据JPA查询方法必须是始终设置为true的参数值?,java,spring,jpa,spring-data,spring-data-jpa,Java,Spring,Jpa,Spring Data,Spring Data Jpa,我不太喜欢Hibernate和Spring数据JPA,我有以下疑问 我有正确执行查询的方法签名: @Repository public interface AccomodationMediaDAO extends JpaRepository<AccomodationMedia, Long> { AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, boolean isMaster);

我不太喜欢Hibernate和Spring数据JPA,我有以下疑问

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

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

    AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, boolean isMaster);

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


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

如果您使用的是Java 8,则可以使用
默认实现将其重载:

public interface AccomodationMediaDAO extends JpaRepository<AccomodationMedia, Long> {

    AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, boolean isMaster);

    default AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId) {
       return findByIdAccomodationAndIsMaster(accomodationId, true);
    }
}

public interface acomodationmediadao扩展了JpaRepository。

无法将默认值设置到方法签名定义中,您必须明确地告诉Spring哪个是您的参数值。如果希望避免在存储库实现中将“isMaster”设置为true,那么在这种情况下可以使用不同的方法。您可以使用
@Query
注释来定义自己的HQL查询并在查询字符串中提供默认值,只要您想使用命名查询而不是Spring数据体系结构提供的命名方法定义来创建自己的自定义respository方法,就可以使用这种方法

在您的特定情况下,您可以尝试以下方法:

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

    @Query("SELECT a FROM AccomodationMedia a WHERE a.accomodationId = :accomodationId AND a.isMaster = true")
    AccomodationMedia findByIdAccomodationAndIsMaster(@Param(value = "accomodationId") Long accomodationId);

}
@存储库
公共接口AccomodationMediaDAO扩展了JpaRepository{
@查询(“从AccomodationMedia a中选择a,其中a.accomodationId=:accomodationId和a.isMaster=true”)
AccomodationMedia findByIdAccomodationAndIsMaster(@Param(value=“accomodationId”)Long accomodationId);
}
请注意,点符号(a.accomodationId)名称后映射的属性必须与实体POJO中声明的实体本地列名相匹配,这意味着“accomodationId”必须与表示ID列的变量名称相匹配,这与“isMaster”属性相同

如中所述,您只需使用
IsTrue
关键字:

AccomodationMedia findByIdAccomodationAndIsMasterIsTrue(Long accomodationId);

因为这不是Java语法。我认为这是一个更简洁的解决方案,tnx:-)啊,很好,我有点错过了一个jpa问题,它应该适用于所有Spring数据存储库,而不仅仅是jpa。
AccomodationMedia findByIdAccomodationAndIsMasterIsTrue(Long accomodationId);