Я столкнулся с какой-то странной проблемой: всякий раз, когда я пытаюсь редактировать регистр в своем приложении, а не обновлять состояние объекта, он сохраняется в новой. Вот идет мой update
методJPA сохраняется, а не обновляется
public void update(Object obj) {
EntityManagerFactory fac = Persistence.createEntityManagerFactory("crud");
EntityManager em = fac.createEntityManager();
em.merge(obj);
em.getTransaction().begin();
em.getTransaction().commit();
em.close();
fac.close();
}
Я думаю, когда я отправить форму редактирования и сеттеры называются Id
каким-то образом установить на 0. Возможно ли это произойти? Форма выглядит следующим образом:
<h:form>
<p:panelGrid columns="2" style="margin: 0 auto;">
<f:facet name="header">
Edit form
</f:facet>
Name:
<h:inputText id="nome" value="#{editUserBean.userToEdit.name}"/>
Age:
<h:inputText value="#{editUserBean.userToEdit.age}" converter="javax.faces.Integer"/>
Pass:
<h:inputText value="#{editUserBean.userToEdit.password}"/>
Gender:
<h:selectOneRadio value="#{editUserBean.userToEdit.gender}" style="font-size: 12px;">
<f:selectItem itemValue="Masc" itemLabel="Masc" />
<f:selectItem itemValue="Fem" itemLabel="Fem" />
</h:selectOneRadio>
<f:facet name="footer">
<div align="center">
<h:commandButton value="save" actionListener="#{editUserBean.save}" icon="ui-icon-check"/>
</div>
</f:facet>
</p:panelGrid>
</h:form>
Hibernate
запрашивает это:
Hibernate:
select
hibernate_sequence.nextval
from
dual
Hibernate:
insert
into
users
(age, gender, name, password, id)
values
(?, ?, ?, ?, ?)
Почему вы создаете entityManager? он должен быть создан один раз для каждого экземпляра (все сеансы идут в статическом контексте). Также вместо слияния вам просто нужно упорствовать. EntityManager будет отображать уже сохраненный объект и обновляет его, если вы добавили к нему новые состояния. Но если вы создаете entityManager каждый раз, когда хотите обновлять, он не может отображать ваши уже сохраненные объекты. – solvator
На самом деле я поместил его туда для названия контекста, мой EntityManager - это глобальная переменная –
Итак, вы можете просто создать его в статическом блоке {}. – solvator