JPA репозиторий читать, удалять и сохранять объект со старым идентификатором - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь прочитать Pricebject идентификатор из хранилища, удалить его и снова сохранить как новый PriceObject со старым идентификатором, но он сохраняет с другим идентификатором.

Это мой метод:

public void getActualPricesAndSaveInDb() {

        try {
                String symbolString = symbol.getSymbol();
                PriceObject oldPriceObject = pricesRepository.findByCompanySymbol(symbolString);
                PriceObject newPriceObject = new PriceObject();
                if (oldPriceObject != null) {
                    pricesRepository.deleteByCompanySymbol(symbolString); 
                    newPriceObject.setId(oldPriceObject.getId());
                }
                newPriceObject.setCompanySymbol(symbolString);
                pricesRepository.save(newPriceObject);
        } catch (APICommandConstructionException | APIReplyParseException | APICommunicationException
                | APIErrorResponse e) {
            e.printStackTrace();
        }
    }

Это мой PriceObject.class :

@Entity
@Data
public class PriceObject {

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    Integer id;

    @Column(nullable = false)
    String companySymbol;

    ...
}

Я уже пробовал:

  • изменить аннотацию @GeneratedValue параметр для (strategy = GenerationType.AUTO),

  • изменить аннотацию @GeneratedValue параметр для (strategy = GenerationType.SEQUENCE).

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Установка id напрямую с использованием объекта не будет работать, если вы укажете стратегию генерации id. Чтобы установить id объекта, который вы хотите, у вас есть два решения (кстати, не все возможные решения):

  1. Удалите аннотацию @GeneratedValue из поля id, но если вы Для этого вы должны указать id для каждой сущности, которую хотите сохранить.
  2. Создайте собственный запрос напрямую, используя вставку EntityManager.

    entityManager.createNativeQuery (" в таблицу (id, ...) значений (id, ...) ");

1 голос
/ 08 апреля 2020

Я не уверен, что правильно понимаю вашу проблему, но это может быть связано с созданным значением. Возможно, вы можете попробовать удалить эту аннотацию, если она вам не нужна, или изменить ее следующим образом: @Column(unique = true).

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