Я работаю над простым приложением, в котором записи пользователей в базе данных отображаются в виде шрифтов, которые могут быть изменены, и пользователь может редактировать или удалять записи. Вот JSF файлjavax.persistence.TransactionRequiredException в запросе update/delete
<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";
}
и здесь методы в дао слое
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 (User user), «System.out.println (« active »+ em.getTransaction(). isActive());», и он печатается «активная ложь» в консоли. –
ok это означает, что транзакция неактивна, поэтому теперь мы можем сосредоточиться на этом, я сказал вам сделать это, только чтобы убедиться. – giannisapi