Файл с автоматическим приращением не возвращает значение (не первичный ключ) - Spring boot JPA

По моему требованию у меня есть поле с автоматическим увеличением и не ключ. Мне нужно получить значение этого поля автоинкремента после вызова репозитория save().

merchantEntity = merchantRepository.save(merchantEntity);
merchantEntity.getMerchId() // returns null

Но каким-то образом я не получаю значение автоинкремента, оно возвращает ноль. Вот мой класс сущности.

@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
private Integer merchId;

Я пробовал использовать несколько других обходных путей, таких как сброс объекта сразу после сохранения. Но результат тот же.

        merchantEntity = merchantRepository.saveAndFlush(entity); // still returns null

        merchantEntity = merchantRepository.save(entity);
        merchantRepository.flush();
        MerchantEntity toBeUpdatedMerchantEntity = 
                  merchantRepository.findOne(merchantEntity.getId()); // still returns null

Можно ли добиться того, чего я ожидаю. Любая помощь высоко ценится. Спасибо


person bynu022    schedule 28.05.2019    source источник


Ответы (1)


Единственный способ получить это автоматически увеличивающееся значение — обновить запись.

Поскольку JPA извлекает только первичный ключ, потому что после EntityManager.persist() должен быть установлен идентификатор.

Поэтому вам нужно перезагрузить запись с помощью findOne() или EntityManager.refresh().

person Simon Martinelli    schedule 28.05.2019
comment
Привет Саймон, Спасибо за ответ. Я уже пробовал использовать findOne(), как указано в примере кода. Он по-прежнему возвращает ноль. Это то, что вы предлагаете? торговецЭнтити = торговецРепозиторий.сохранить(сущность); tradeRepository.flush(); MerchantEntity toBeUpdatedMerchantEntity =merchantRepository.findOne(merchantEntity.getId()); // по-прежнему возвращает ноль - person bynu022; 28.05.2019