我遇到了一個奇怪的問題,每當我嘗試在應用程序中編輯一個寄存器而不是更新實體的狀態時,它會持續一個新的問題。這裏不用我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();
}
我的猜測是,當我提交編輯表單和setter方法被稱爲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