Я пытаюсь выполнить этот основной код 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 явно. Удаление идентификационного присвоения зафиксировало его.
Но я не получил его, что я должен буду изменить для получения работы кода?
Ошибка возникает из-за того, что ID объекта установлен. Hibernate различает переходные и отделенные объекты, и persist
работает только с переходными объектами. Если persist
заключит, что объект отделен (а это произойдет, поскольку ID установлен), он вернет ошибку "detached object passed to persist". Более подробную информацию вы можете найти здесь и здесь.
Однако это применимо только если вы указали первичный ключ для автоматической генерации: если поле настроено так, чтобы всегда устанавливаться вручную, то ваш код работает.
Я получил ответ, я использовал:
em.persist(user);
Я использовал слияние вместо сохранения:
em.merge(user);
Но понятия не имею, почему настаивать не сработало.: (