В любом случае, ваша напыщенная речь касается не только проблем с ранее принятым (унаследованным) решением для Hibernate, но и с вашей разработкой как программиста в целом.
Вот как я бы это сделал,Если подобный проект будет у меня на коленях и остро нуждается в рефакторинге или улучшении.
Это зависит от стадии жизненного цикла вашего программного обеспечения и времени, которое требуется, если вы должны сделать большие изменения или придерживаться меньших.Тем не менее, миграция с приращениями кажется вашим лучшим вариантом в долгосрочной перспективе.
Сохранение приложения, написанного на Java, на короткий срок кажется разумным, серьезное переписывание на другом языке определенно нарушит приемочные и интеграционные тесты.
Как и предлагал Джозеф, сделайте шаг из Hibernate в JPA.Это не должно стоить слишком много времени.И оттуда вы можете переключить серверную часть на другой способ хранения.Работать над тем, чтобы разделить проблемы.Выберите подходящую концепцию, некоторые предпочитают MVC, в то время как другие могут выбрать CQRS, а другие предпочитают другой стиль сегментации / разделения.
Поскольку JVM поддерживает множество языков, вы всегда можете переключиться на любой из этих или по крайней меречастично реализовать функциональность в более динамичных языках.Это решит часть проблемы, когда вы продолжаете сталкиваться с «глупостью» Java, сохраняя при этом отличную оптимизацию текущих JVM во время выполнения.
Кроме того, вы можете настроить автоматические интеграционные тесты... поскольку мы надеемся, что приложение никогда не будет запущено из вашей IDE, эти тесты дадут вам честные результаты.
Примечание: я никогда не доверяю своей IDE для правильного получения зависимостей, если у IDE есть возможность вставлять свои собственные библиотеки в мой путь сборки или времени выполнения.
Итак, подведем итог коротко: маленькие шаги;потерять Hibernate и перейти к более абстрактным JPA;если Java становится глупой, то постепенно переключайтесь на умный язык.Ваша главная задача должна состоять в том, чтобы реструктурировать базовую часть кода без потери функциональности, имея в виду открытый дизайн, который в дальнейшем упростит добавление интересных и интересных функций.