Я создаю API отдыха электронной коммерции с помощью Spring Boot и использую PostgreSQL. Я уже фильтрую товары по продавцу, но мне также нужно отфильтровать категории по продавцу, поэтому, если покупатель просматривает профиль продавца, я просто хочу указать категории продуктов продавца и их характеристики. Я думаю, что это может быть с Elasticsearch, но может лиasticaarch решить это или как я могу сделать это с PostgreSQL Я не хочу отношений между торговцами и категориями, потому что это бессмысленно для меня. Как я могу это сделать.
Модели, которые я использую
Категория:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotBlank
private String name;
@NotBlank
private String photoUrl;
private boolean subCategory;
private double commission;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@ManyToOne
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent",cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("id desc")
private List<Category> childs;
@JsonIgnore
@OneToMany(mappedBy = "category",cascade = CascadeType.REMOVE, orphanRemoval = true, fetch = FetchType.LAZY)
@OrderBy("id desc")
private List<Product> products;
Продукт:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private UUID uuid;
@NotBlank
@Column(unique = true)
private String name;
@NotNull
private double tax;
private String photoUrl;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "category_id",referencedColumnName = "id")
private Category category;
private boolean status;
private double commission;
@OneToMany(mappedBy = "product",cascade = CascadeType.ALL,orphanRemoval = true)
@OrderBy("id desc")
@EqualsAndHashCode.Exclude
private Set<ProductSpecify> productSpecifies;
@OneToMany(mappedBy = "product",cascade = CascadeType.ALL,orphanRemoval = true,fetch = FetchType.EAGER)
@OrderBy("id desc")
@EqualsAndHashCode.Exclude
private Set<Barcode> barcodes;
@ManyToMany
private List<User> users;
ProductSpecify:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private UUID uuid;
@NotNull
private double totalPrice;
@NotNull
private double unitPrice;
@NotNull
private int quantity;
@NotNull
private double contents;
@NotNull
@Enumerated(EnumType.STRING)
private UnitType unitType;
private double commission;
@NotNull
private double recommendedRetailPrice;
@ManyToOne
@JoinColumn(name = "product_id",referencedColumnName = "id")
private Product product;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id",referencedColumnName = "id")
private User user;
@ManyToMany(fetch = FetchType.EAGER)
private List<State> states;