spring数据jpa查询示例及相关实体

mlmc2os5  于 2021-07-16  发布在  Java
关注(0)|答案(2)|浏览(351)

我似乎无法添加与相关实体匹配的querybyexample探测。

@Entity
@Data
public class ArtistEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String description;
    @ManyToMany(fetch = FetchType.EAGER)
    private Set<GenreEntity> genreList = new HashSet<>();
    @Version
    private Long version;
}
@Entity
@Data
public class GenreEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    @Version
    private Long version;
}
@Repository
public interface ArtistRepository extends JpaRepository<ArtistEntity, Long> {
}

当我尝试下面的查询时,根据hibernate的日志,我的探测器没有针对这个类型运行任何条件

GenreEntity genreEntity = new GenreEntity();
genreEntity.setName("Heavy Metal");

ArtistEntity artistEntity = new ArtistEntity();

Set<GenreEntity> genreEntitySet = new HashSet<>();
genreEntitySet.add(genreEntity);

artistEntity.setGenreList(genreEntitySet);

Example<ArtistEntity> example = Example.of(artistEntity);
Pageable pagination = PageRequest.of(0, 10);
artistRepository.findAll(example, pagination);

我还试图查看有关qbe的spring数据jpa文档,但没有发现任何特别提到这个限制的内容,这使我认为这是一个意外的行为。

x4shl7ld

x4shl7ld1#

目前,您不能通过示例查询来实现这一点。

spring文档声明这只适用于singularattribute。
目前,只有属性属性可以用于属性匹配。https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-以身作则
您要按一个 Set<GenreEntity> (genreList) ,这是一个 PluralAttribute . 无法按此字段搜索。
在构建查询时,它将被忽略,如下所示:https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/convert/querybyexamplepredicatebuilder.java#l127

你可以使用规范。

高级spring数据jpa-规范和querydsl。https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
为此,您需要从接口进行扩展 JpaSpecificationExecutor :

public interface ArtistRepository extends JpaRepository<ArtistEntity>, JpaSpecificationExecutor<ArtistEntity> {
}

你还需要实现你的习惯 Specification<T> .
然后你可以用 findAll(Specification<T> spec, Pageable pageable) .

tzdcorbm

tzdcorbm2#

您可以只使用此库,它支持嵌套字段和更多内容:https://github.com/turkraft/spring-filter
它将允许您运行搜索查询,例如:
/search?filter=average(ratings)>4.5,brand.name in('audi','land rover')and(year>2018 or km<50000)and color:'white'and accidents为空

相关问题