Добрый день.
Вы знаете, можно обойтись одной таблицей вместо двух.
Вот, представьте, что завтра вам придется создать субкатегорию для субкатегории, т.е. вам нужно будет завести еще одну сущность и связать ее с подкатегорией и т.д.
Чтобы этого не было достаточно одной сущности. При этом будет доп. колонка parent (parent_id), которая посредством OneToMany ManyToOne будет связана с родительской сущностью. И так вы сможете создавать неограниченное кол-во вложенностей. Ну и конечно же кол-во запросов уменьшится.
Вы можете агрегировать данные в БД следующим образом:
SELECT
category.id, category.title, ARRAY_AGG(subcategory.title)
FROM category
JOIN subcategory ON subcategory.category_id = category.id
GROUP BY category.id, category.title;