JPA: заменить объект в БД на объект с тем же идентификатором - PullRequest
0 голосов
/ 03 мая 2019

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

У меня такое ощущение, что есть лучший способ, чем я сейчас думаю. Мое предположение состояло в том, чтобы получить объект через идентификатор, установить все его свойства в новое значение и зафиксировать его. Но так как аргумент id такой же, как changeLes.getId (), создается впечатление, что это, вероятно, будет более простым способом перезаписать старую запись в БД. Однако я понятия не имею, как это сделать, и если это правильный способ сделать это.

void update(ClubLes changedLes, int id) {
     try {
        GenericDaoJpa.openPersistency();
        Clubles les = em.find(ClubLes.class, id);
        em.getTransaction().begin();
        //setters? eg les.setName(changedLes.getName())
        em.getTransaction().commit();
        GenericDaoJpa.closePersistency();
    } catch (NoResultException e) {
        GenericDaoJpa.closePersistency();
        throw new NoResultException("Les could not be modified! try again!");
    }
}

Я использую автоматически сгенерированные ключи, поэтому я не уверен, что это вызовет проблему.

1 Ответ

1 голос
/ 03 мая 2019

Чтобы обновить сущность, вам нужно сделать

em.merge(entity);
em.flush();

См

https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#merge-T-

https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#flush--

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