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

Страница «Карта сущностей» в интерфейсе 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 — подробности см. в разделе Мониторинг
транзакций.
См. также
Мониторинг транзакций
Страница Мониторинг транзакций находит @Transactional методы, которые держат соединение с базой данных дольше, чем нужно: блокирующие сетевые вызовы, запросы N+1 и пагинацию в памяти внутри транзакции. Для каждой проблемы показано, где она возникает, чтобы вы могли найти это место в коде.
Дамп потоков
На странице Дамп потоков в режиме реального времени отображается состояние каждого потока в управляемом сервисе на Spring Boot. Страница периодически опрашивает сервис, поэтому список, состояния потоков и временная шкала отражают текущее состояние JVM, а не зафиксированное в определённый момент.