我正在研究一個簡單的應用程序,其中數據庫中的用戶記錄顯示在primefaces數據表中,用戶可以編輯或刪除記錄。 這裏是JSF文件更新/刪除查詢中的javax.persistence.TransactionRequiredException
<h:form>
<p:dataTable var="user" value="#{userBean.users}" >
<p:column headerText="username">
<h:inputText value="#{user.username}" rendered="#{userBean.editable}" />
<h:outputText value="#{user.username}" rendered="#{not userBean.editable}" />
<!--<h:outputText value="#{user.username}" />-->
</p:column>
<p:column headerText="edit">
<h:commandLink value="Edit" action="#{userBean.editAction(index)}" rendered="#{not userBean.editable}" />
</p:column>
<p:column headerText="save">
<p:commandButton value="Save" id="save" disabled="false" action="#{userBean.saveAction(user)}"/>
</p:column>
<p:column headerText="delete">
<p:commandButton value="Delete" id="delete" disabled="false" action="#{userBean.deleteAction(user)}"/>
</p:column>
</p:dataTable>
</h:form>
,這裏是保存和更新操作方法,我在豆
public String saveAction(User user) {
this.setEditable(false);
DB db = new DB();
db.updateUser(user);
return "editSuccess";
}
public String deleteAction(User user) {
DB db = new DB();
db.deleteUser(user);
return "editSuccess";
}
調用,這裏是在DAO層的方法
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("RegisterationFormJPAPU");
EntityManager em = emf.createEntityManager();
public void updateUser(User user) {
Query query = em.createQuery("update User set username = :uname where username = :uname");
query.setParameter("uname", user.getUsername());
query.executeUpdate();
}
public void deleteUser(User user) {
Query query = em.createQuery("delete from User where username = :uname");
query.setParameter("uname", user.getUsername());
query.executeUpdate();
}
但是當我按編輯鏈接或刪除按鈕,出現此錯誤
Severe: javax.faces.el.EvaluationException: javax.persistence.TransactionRequiredException:
Exception Description: No transaction is currently active
有人會告訴我問題在哪裏。
第一本我會做的是em.getTransaction()isActive(),看看是否真的不存在活躍交易。請檢查並更新 – giannisapi
我在updateUser(用戶用戶)方法的開頭寫了這行代碼, 「System.out.println(」active「+ em.getTransaction()。isActive());」,並打印控制檯中的「主動錯誤」。 –
好吧,這意味着交易不活躍,所以現在我們可以專注於此,我告訴你這樣做只是爲了確保。 – giannisapi