Карта сущностей

Страница Карта сущностей проверяет JPA-маппинг каждой сущности в сервисе Spring Boot и показывает ассоциации, замапленные так, что это стоит лишних запросов: жадную загрузку, @ManyToMany на основе List, каскад REMOVE или ALL и однонаправленный @OneToMany.

СкриншотыСкриншоты соответствуют последнему минорному релизу Axelix.

главная страница карты сущностей

Страница «Карта сущностей» в интерфейсе Axelix

Ошибки в маппинге JPA-ассоциаций не ломают приложение. Вместо этого они стоят лишних запросов и загрузок при каждом обращении к сущности, и на ревью их легко пропустить. Карта сущностей проверяет маппинг всех сущностей и показывает, где такие ошибки есть.

Страница доступна только для чтения всем пользователям, прошедшим аутентификацию: ее могут открыть VIEWER, EDITOR, ADMIN и SUPER_ADMIN. Полную матрицу ролей и полномочий см. в разделе Роли и полномочия.

Что показывает страница

Сводка сверху показывает, сколько сущностей в сервисе, у скольких из них есть проблемы и у скольких их нет. Ниже перечислены сущности с проблемами.

Раскройте сущность, чтобы увидеть:

  • имя таблицы из @Table, а если оно там не задано — имя сущности;
  • каждую проблемную ассоциацию, например Owner.pets, с её проблемами;
  • маппинг этой ассоциации с действующими значениями, включая значения по умолчанию, например @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "owner_id") List<Pet>.

Если ни в одной сущности проблем нет, страница сообщает об этом вместо списка.

Обнаруженные проблемы

  • Жадная загрузка (EAGER): ассоциация загружается при каждом чтении сущности, независимо от того, используются ли данные. Сюда же относятся @ManyToOne и @OneToOne без явного fetch, потому что в JPA они по умолчанию жадные.
  • List для @ManyToMany: @ManyToMany на основе List заставляет Hibernate очищать и заново заполнять всю связующую таблицу при любом изменении.
  • Некорректный CascadeType: у @OneToMany или @ManyToMany каскад CascadeType.REMOVE или CascadeType.ALL заставляет Hibernate удалять связанные записи по одной, что даёт запросы N+1.
  • Однонаправленный @OneToMany: @OneToMany без mappedBy требует дополнительной связующей таблицы или отдельного UPDATE на каждую запись.

Как это работает

Axelix Spring Boot Starter читает JPA-метамодель приложения и проверяет каждую ассоциацию. В отличие от Мониторинга транзакций, результат не зависит от нагрузки: Axelix проверяет, как замаплены сущности, а не какие запросы выполнялись. Для страницы в приложении нужен Hibernate.

MCP-инструменты

ИИ-агенты могут получить сущности и проблемы их маппинга через MCP, для всего приложения или для одной сущности. См. Каталог MCP-инструментов.

Свойства

Карта сущностей работает вместе с мониторингом транзакций и включена по умолчанию. Чтобы её выключить, установите axelix.sbs.transaction.monitoring.enabled=false — подробности см. в разделе Мониторинг транзакций.

См. также

На этой странице