Поскольку вы сделали git add
, в Git все еще должны быть объекты BLOB для ваших измененных файлов во внутренних структурах, хотя и без их имен файлов. Есть способы восстановить их, но это потребует некоторого терпения и судебной работы с вашей стороны, связывая капли с тем, к какому файлу они принадлежат.
Внутреннее хранение объектов Git описано здесь: https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
. может восстановить ваши измененные файлы с помощью git-recovery: https://github.com/ethomson/git-recover
Обсуждение этого другого, но связанного с этим вопроса также может помочь: [113 ] Что произойдет, если я прерву команду git add?
Единственная сессия. Запустите транзакцию, когда необходимо сделать ряд операций (как данные обновления после кнопки OK диалогового окна), фиксируйте tx в конце. Соединение, хотя постоянно открыто (так как это - та же сессия), и таким образом все возможности для кэширования может использоваться и Hib и RDBMS.
Это может также быть хорошая идея реализовать прозрачную сессию, вновь открылись в случае, если соединение пошло мертвое - пользователи склонны оставлять приложения открытыми в течение длительных промежутков времени, и это должно продолжить работать в понедельник, даже если бы сервер БД был перезагружен в выходные.
Обновление
Jens Schauder обеспечил причину использовать несколько сессий: частичные (нежелательные) обновления сессии. Ну, это сводится к способу, которым Вы используете, в спящем режиме.
Предположим, что у нас есть два открытые диалоговых окна (как в примере блога Jens). Если пользователь нажимает radiobox, и мы сразу обновляем Быть в спящем режиме объект, связанный с этим radiobox, то, когда пользователь нажимает Cancel, мы в беде - сессия уже обновляется.
Правильный путь, поскольку я вижу его, состоит в том, чтобы обновить диалоговые переменные (не будьте в спящем режиме объекты), только. Затем когда пользователь нажимает "OK", мы начинаем транзакцию, слияние обновило объекты, фиксируйте транзакцию. Никакой мусор никогда не сохраняется в сессию.
MyHibernateUtils.begin();
Settings settings = DaoSettings.load();
// update setttings here
DaoSettings.save(settings);
MyHibernateUtils.commit();
Если мы реализуем такое чистое разделение проблем, мы можем позже переключить на несколько сессий с простым изменением MyHibernateUtils.begin () реализацию.
Что касается возможной утечки памяти, хорошо... Transaction.commit () называет Session.flush (), какой AFAIK, чистит кэш также. Кроме того, можно вручную управлять кэширующейся политикой путем вызова Session.setCacheMode ().
Проблемой с "''сессией на поток''" являются хорошие приложения Swing, делают доступ к базе данных вне EDT, обычно в недавно созданных потоках SwingWorker. Таким образом, "''сессия на поток''" быстро становится "''сессией на щелчок''".
Не используйте единственную сессию. Для всего кроме наименьших приложений это вырастет, собирая устаревшие данные и станет медленнее и медленнее, так как грязная проверка должна проверить каждый объект в сессию.
Если Вы не нуждаетесь/хотите в ленивой загрузке, и отслеживание изменений В спящем режиме, можно использовать недолгие сессии.
Но если Вы хотите извлечь выгоду из питания, в спящем режиме, используют подход, который я описал в своем блоге: http://blog.schauderhaft.de/2008/09/28/hibernate-sessions-in-two-tier-rich-client-applications/
или в немецкой версии:
http://blog.schauderhaft.de/2007/12/17/hibernate-sessions-in-fat-client-anwendungen/
AFAIK это - действительно тот же подход, описанный в http://in.relation.to/Bloggers/HibernateAndSwingDemoApp, но с рекомендацией, как на самом деле определить объем Вашей сессии: На Сессии на Кадр, за исключением модальных Кадров, которые используют сессию родительского Кадра.
Просто удостоверьтесь, что никогда не объединили объекты от различных сессий. Это доставит много неприятностей.
В ответ на обновление Vladimirs:
Используйте одну сессию на поток (документ) и столбец версии или метки времени для разрешения оптимистичного параллелизма и таким образом предотвращения конфликтов сессии к экземпляру. Экземпляры присоединения к сессии при необходимости, если Вам не нужны длительные транзакции или строгий уровень изоляции.