Последний комментарий к этой теме http://opensource.atlassian.com/projects/hibernate/browse/HHH-1273 очень хорошо определяет это:
persist () четко определен. Это делает
временный экземпляр постоянный.
Тем не менее, это не гарантирует, что
Значение идентификатора будет присвоено
постоянный экземпляр немедленно,
назначение может произойти на одном уровне
время. В спецификации не сказано, что
проблема у меня с persist ().
persist () также гарантирует, что будет
не выполнять оператор INSERT, если он
вызывается вне транзакции
границы. Это полезно в
длительные разговоры с
расширенный контекст сеанса / постоянства.
Требуется метод, подобный persist ().
save () не гарантирует то же самое, это
возвращает идентификатор, и если
ВСТАВКА должна быть выполнена, чтобы получить
идентификатор (например, генератор «идентичности»,
не "последовательность"), эта вставка происходит
немедленно, независимо от того, если вы
внутри или вне транзакции.
Это не хорошо в долгосрочной перспективе
разговор с расширенным
Контекст сеанса / постоянства.
Кроме того, из того, что я мог почерпнуть из других источников, видно, что сущность, имеющая cascade = "persist", будет каскадироваться во время вызова, а не при сбросе. Это тоже может быть очень полезно.