@vsafonin

Hibernate как добавить и отобразить в сущности дополнительную колонку в связывающей ManyToMany таблице?

Доброго времени суток, подскажите пожалуйста как правильно решить такую задачу:
у меня есть 2 сущности
  • Продукты
    • id
    • Name
    • Cost
    • Category

  • Транзакции
    • id
    • List (Product)



Связь между ними Многие ко многом, то есть создана таблица transaction_product с полями:
  • transaction_id
  • product_id

соответственно.

entity классы выглядят примерно так:
Product

@Entity
@Table(name = "products")
public class Product {
	
	@Id
	@Column(name = "id")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	
	@Column(name = "name")
	private String name;
	
	@ManyToOne(cascade = {CascadeType.DETACH,CascadeType.MERGE,CascadeType.REFRESH}, fetch = FetchType.LAZY)
	@JoinColumn(name = "category")
	private Category category;
	
	@Column(name = "cost")
	private Double cost;
//constructor getter setter
}



Transaction

@Entity
@Table(name = "transactions")
public class Transaction {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;



    @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH},
            fetch = FetchType.LAZY)
    @JoinTable(
            name = "transactions_products",
            joinColumns = @JoinColumn(name = "product_id"),
            inverseJoinColumns = @JoinColumn(name = "transaction_id")
    )
    private List<Product> products;
//constructor getter setter
}



Тут мне понадобилось добавить еще одну колонку "quantity" которая отображает количество конкретных продуктов в транзакции. Логичнее всего добавить в таблицу transaction_product - но вот тут ступор, а как это отобразить в java?
Наверное как то так?
private List<Map<Product, Integer>> products;
но как это связать с hibernate?

или не надо так делать?
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Я недавно ответил на аналогичный вопрос:
https://qna.habr.com/q/1114434
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы