Вы должны иметь один репозиторий на таблицу в JPA?

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

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам