“отдельный объект передал для сохранения ошибки” с кодом JPA/EJB

Я пытаюсь выполнить этот основной код JPA/EJB:

public static void main(String[] args){
         UserBean user = new UserBean();
         user.setId(1);
         user.setUserName("name1");
         user.setPassword("passwd1");
         em.persist(user);
  }

Я получаю эту ошибку:

javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.JPA.Database

Какие-либо идеи?

Я ищу в Интернете и причине, которую я нашел, был:

Это было вызвано тем, как Вы создали объекты, т.е. Если Вы устанавливаете свойство ID явно. Удаление идентификационного присвоения зафиксировало его.

Но я не получил его, что я должен буду изменить для получения работы кода?

80
задан Manuel Drieschmanns 7 November 2017 в 13:20
поделиться

2 ответа

Ошибка возникает из-за того, что ID объекта установлен. Hibernate различает переходные и отделенные объекты, и persist работает только с переходными объектами. Если persist заключит, что объект отделен (а это произойдет, поскольку ID установлен), он вернет ошибку "detached object passed to persist". Более подробную информацию вы можете найти здесь и здесь.

Однако это применимо только если вы указали первичный ключ для автоматической генерации: если поле настроено так, чтобы всегда устанавливаться вручную, то ваш код работает.

126
ответ дан 24 November 2019 в 09:47
поделиться

Я получил ответ, я использовал:

em.persist(user);

Я использовал слияние вместо сохранения:

em.merge(user);

Но понятия не имею, почему настаивать не сработало.: (

12
ответ дан 24 November 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: