ManyToMany Product

Na entidade Product:

@ManyToMany
    @JoinTable(name = "tb_product_category",
            joinColumns = @JoinColumn(name = "product_id"),
            inverseJoinColumns = @JoinColumn(name = "category_id")
    )
    private Set<Category> categories = new HashSet<>();

O JoinTable criará uma tabela do meio (auxiliar/associação). Nela, passamos a referência para as duas chaves estrangeiras.

Passamos o JoinClumns para o product_id e o InverseJoinColumns (do outro lado), a category_id.

❗O JoinColumn leva o nome da classe que estamos utilizando. Como é a Classe Product, é product_id.

Atualizado