Не совсем понятно зачем Вам это: org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-tomcatprovidedorg.springframework.bootspring-boot-starter-data-mongodb Знаете, что означает scope PROVIDED ? Знакомы cо spring-boot ?
Признавайтесь честно это лаба или задание на собес? Что прямо вот ничего совсем и не понятно? Тут принято задавать конкретные вопросы, если хотите получить хороший ответ
gim0: тогда могу посоветовать только добавить Configuration configuration = new Configuration().addAnnotatedClass(Book.class).configure(); Насколько я помню у меня проблема решилась добавлением явных конструкторов без параметров. Возможно ваша проблема связана с тем, что у вас маппинг не на реальной базе, а на org.hibernate.dialect.H2Dialect, насколько я знаю она очень и очень много вещей не поддерживает.
gim0: для постоянных файлов - отдельное хранилище, например apache http server (если пользователи загружают картинки например и потом буду их просматривать в галерее) или ftp или что-то еще. Путь не хардкодать к хранилищу, а передавать в Jboss как параметр: можно указывать через profile при сборке майвеном, можно как параметр jvm, можно как jndi или еще куча вариантов...
А нужен ли вам откат миграций впринципе? Какие вы планируете операции откатывать: на данных (dml) или на структуре бд (ddl)? Как правило изменения в структуре нельзя так просто откатить, во-первых возможна потеря данных, во-вторых надо думать о совместимости версий бд и приложения (а для этого надо делать в два этапа изменения структур)...
Nepster9: Ну а если хотите добиться еще большей отпимизации - посмотрите в сторону кэша второго уровня и кэша запросов. В вашем коде куча мест для оптимизации.
Nepster9: ну насколько я могу судить количество запросов нормальное. 1) select spr1; 2)select spr2; 3) select ID для TDATA (генерятся в бд как sequence); 4) update spr1; 5) update spr2. Если хотите избавится от 4 и 5 - надо поправить на поле private Spr1 spr1id; аннотации @ManyToOne(fetch = FetchType.LAZY, cascade =CascadeType.ALL) вместо CascadeType.ALL попробуйте CascadeType.NONE, но точно не скажу, попробуйте поэкспериментировать....