Spring JPA сохраняет переходную сущность - PullRequest
0 голосов
/ 15 сентября 2018

в спящем режиме, если я persist новым объектом, он должен стать управляемым, более того, он должен вернуть управляемый объект.

если объект отсоединен, merge вернет управляемый объект, но тот, который я передал, будет отсоединен.

Я пробовал это при весенней загрузке с hibernate, и все работает, кроме следующего случая:

User transientUser=new User();
    transientUser.setId(9L);
    User managedTransientUser=userRepository.save(transientUser);

если я установлю Id вручную (даже с удалением автогенерации), объект, который я передаю (transientUser), все равно останется неуправляемым. Если я использую Identity поколения, то возвращенная и переданная сущность будут одинаковыми (id равен нулю, а БД будет автоматически увеличиваться), ожидается ли это?

1 Ответ

0 голосов
/ 15 сентября 2018

Это просто потому, что вы не звоните persist(). Вы звоните userRepository.save().

Этот метод проверяет, является ли объект новым (проверяя, имеет ли он уже идентификатор). Если это так, он вызывает persist(). В противном случае он вызывает merge(). Поскольку у вашей сущности уже есть идентификатор, она вызывает merge().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...