Предполагается, что в JPA есть один репозиторий за столом?

Предполагается, что у вас есть один репозиторий на таблицу в JPA? Если нет, как вы решаете генерики в базе данных репозитория?

Например, ниже StoreRepository. Он обрабатывает операции CRUD объекта Store. Если бы я хотел, чтобы репозиторий сохранил объект StoreEvent, как бы я хотел изменить интерфейс ниже, чтобы разместить оба объекта?

@Repository
public interface StoreRepository extends JpaRepository<Store, String> {
    public Store findByGuid(String guid);
}

Ответ 1

Поскольку репозиторий представляет собой концепцию, полученную из Domain Driven Design, думать о таблицах базы данных является неправильным подходом. По определению вы получаете доступ к совокупным корням из репозитория. Эффективно репозиторий имитирует их коллекцию.

Теперь, что формирует совокупный корень? Наверное, еще интереснее: что нет? Это, конечно, сильно зависит от вашего домена, но позвольте мне привести вам пример здесь. Order, содержащий LineItems, как правило, моделируется как совокупный корень. Это связано с характером композиции Order. A LineItem не существует без окружающего Order.

Обычно механизмы доступа настойчивость должны следовать принципам домена. Таким образом, вы бы моделировали как Order, так и LineItem как @Entity классы, но только создавали OrderRepository, в качестве формы, совокупный корень и эффективно контролировали правила согласованности в графе объектов.

Мы также настоятельно рекомендуем не использовать базовые интерфейсы хранилища конкретных баз данных, поскольку они, как следует из названия, раскрывают информацию о магазине (например, flush()) для клиентов, о которых не следует знать, если это возможно. Подробнее об этом в моем ответе здесь.