Это похоже на отношение @ManyToMany,
Вместо использования @OneToMany и @ManyToMany, вы можете использовать следующую конфигурацию:
В классе Категория:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "templatecat", joinColumns = { @JoinColumn(name = "categoryId", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "templateId") })
private Set<Template> templates;
В классе шаблонов:
@Entity
@Table(name = "template")
@ManyMany(optional = true, mappedBy="templates");
private Set<Category> categories;
Если вы хотите просмотреть все шаблоны данной категории, запрос будет:
select o.templates from Category o where o.id = ?
Обратное также работает (все категории изшаблон)
select o.categories from Template o where o.id = ?
Надеюсь, это помогло вам.