Database structure Product MainPicture (Hibernate, Spring Data JPA)

У меня есть в базе данных сущности Product и Picture.

@Entity
@Table(name = "products")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(name = "products_pictures",
            joinColumns = @JoinColumn(name = "product_id"),
            inverseJoinColumns = @JoinColumn(name = "picture_id"))
    private Set<Picture> pictures = new HashSet<>();

    ...
}

@Entity
@Table(name = "pictures")
public class Picture {
  
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToMany(mappedBy = "pictures")
    private Set<Product> products = new HashSet<>();
    
    ...
}

Отношение @ManyToMany - из-за того, что одно и то же изображение может относиться к разным продуктам. Я хочу сделать возможным выбор главных изображений для продукта, чтобы эти главные изображения отображались на странице со списком продуктов (например, при помощи карусели). Насколько я понимаю, это можно сделать добавив следующие поля:

  1. В сущности Product:
    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(name = "products_main_pictures",
            joinColumns = @JoinColumn(name = "product_id"),
            inverseJoinColumns = @JoinColumn(name = "picture_id"))
    private Set<Picture> mainPictures = new ArrayList<>();
  1. В сущности Picture:
    @ManyToMany(mappedBy = "mainPictures")
    private Set<Product> productsMain = new HashSet<>();

Собственно вопросы:

  1. Правильно ли я делаю эти отношения? Может есть способ проще? Или вообще одну главную картинку только оставить?
  2. Нужно ли добавлять в таблицу pictures или products_main_pictures колонку order типа int, чтобы еще и порядок отображения учитывать? Насколько я понимаю, добавление такой колонки ведет к усложнению операций вставки и удаления из середины.

Ответы (0 шт):