Затем от этого класса уже буду наследоваться реальные контроллеры. Хотелось в событии onBeforeShow сделать необходимые действия. Но на строке boolean entityStatesIsNew = getEntityStates().isNew(getEditedEntity()); вылетает ошибка “IllegalStateException: Edited entity isn’t initialized yet”.
Мне то понятно что за ошибка и что означает, не понимаю почему. Если тоже самое делать в реальном контроллере, то всё нормально, т.е. контроллер напрямую наследующий StandardDetailView. А если через CustomDetailView, то ошибка как раз на уровне CustomDetailView.
Тут вопрос в том, как вы открываете экран (навигация или диалог). Есть у вас в экране DataLoadCoordinator или нет.
Если нет DataLoadCoordinator, то вы сами определяете когда должна загрузиться сущность.
Если есть DataLoadCoordinator, то при навигации сущность полностью грузится в BeforeShowEvent, при открытии в диалоге, она может быть установлена с неправильным fetchPlan и перезагружена в BeforeShowEvent.
У вас вызывается this.setupEntityToEdit();, по коду этот метод берет id из route и устанавливает его в dataLoader, то есть если экран открыт в диалоге, сущность не устанавливается. Если идет навигация, то скорее всего DataLoadCoordinator не успел загрузить сущность, ибо вы ставите id в загрузчик и стучитесь к сущности в одном событии.
В любом случае действия с сущностью лучше делать после BeforeShowEvent, ибо если вы будете как-то стучаться до сущности пока она не загружена с правильным fetchPlan, то можете поймать ошибку cannot get unfetched attribute.
Более точно сказать, почему с наследованием от StandardDetailView все норм, а с CustomDetailView нет, без тестового приложения сложно.