In my Spring Boot/Data/JPA 2.1 application I have a following entity:
@Entity
@NamedEntityGraph(name = "graph.CardCategoryLevel", attributeNodes = { @NamedAttributeNode("cardCategory"), @NamedAttributeNode("level") })
@Table(name = "card_categories_levels")
public class CardCategoryLevel extends BaseEntity implements Serializable {
@Id
@SequenceGenerator(name = "card_categories_levels_id_seq", sequenceName = "card_categories_levels_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "card_categories_levels_id_seq")
private Long id;
@OneToOne
@JoinColumn(name = "card_category_id")
private CardCategory cardCategory;
@OneToOne
@JoinColumn(name = "level_id")
private Level level;
@Column(name = "card_drop_rate")
private Float cardDropRate;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "cardCategoryLevel")
private List<Card> cards = new ArrayList<Card>();
....
}
and Spring Data CardCategoryLevelRepository
:
@Repository
public interface CardCategoryLevelRepository extends JpaRepository<CardCategoryLevel, Long> {
@Override
@EntityGraph(value = "graph.CardCategoryLevel", type = EntityGraphType.FETCH)
Page<CardCategoryLevel> findAll(Pageable pageable);
}
Based on CardCategoryLevelRepository.findAll(Pageable pageable)
I can retrieve all CardCategoryLevel
with pagination and sorting.
Right now I don't know how to apply filtering into this approach. For example I need to have possibility to filter CardCategoryLevel
by CardCategory
or/and by Level
or/and by cardDropRate
. How to inject filtering feature into CardCategoryLevelRepository.findAll(Pageable pageable)
method or may be a new similar one ?