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 - из-за того, что одно и то же изображение может относиться к разным продуктам. Я хочу сделать возможным выбор главных изображений для продукта, чтобы эти главные изображения отображались на странице со списком продуктов (например, при помощи карусели). Насколько я понимаю, это можно сделать добавив следующие поля:
- В сущности 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<>();
- В сущности Picture:
@ManyToMany(mappedBy = "mainPictures")
private Set<Product> productsMain = new HashSet<>();
Собственно вопросы:
- Правильно ли я делаю эти отношения? Может есть способ проще? Или вообще одну главную картинку только оставить?
- Нужно ли добавлять в таблицу pictures или products_main_pictures колонку order типа int, чтобы еще и порядок отображения учитывать? Насколько я понимаю, добавление такой колонки ведет к усложнению операций вставки и удаления из середины.