Используя синхронизированную блокировку статического метода, вы синхронизируете методы и атрибуты класса (в отличие от методов и атрибутов экземпляра)
Итак, ваше предположение верно.
Мне интересно, является ли синхронизация метода правильным подходом для обеспечения безопасности потоков.
Не совсем. Вы должны позволить этой работе делать ваши RDBMS вместо этого. Они хороши в таких вещах.
Единственное, что вы получите, синхронизировав доступ к базе данных, это сделайте ваше приложение ужасно медленным. Более того, в коде, который вы разместили, вы каждый раз создаете фабрику сессий, таким образом, ваше приложение будет тратить больше времени на доступ к БД, чем на выполнение реальной работы.
Представьте себе следующий сценарий:
Клиенты A и B пытаются вставить различную информацию в запись X таблицы T.
При вашем подходе единственное, что вы получаете, - это убедиться, что один вызывается после другого, когда это все равно произойдет в БД, потому что СУБД не позволит им вставлять половину информации из A и половину из B в в то же время. Результат будет таким же, но только в 5 (или более) раз медленнее.
Возможно, было бы лучше взглянуть на главу "Транзакции и параллелизм" в документации Hibernate. В большинстве случаев проблемы, которые вы пытаетесь решить, уже решены и гораздо лучшим способом.